Поддерживает ли iPhone SDK fork()
и pipe()
, традиционные функции unix? Я не могу заставить их работать.Вилка() на iPhone
Редактировать
Проблема решена. Здесь я предлагаю решение любому, кто сталкивается с подобными мне проблемами. Я был вдохновлен ответами в этой теме.
В iPhone нет способа разблокировать процесс. Однако реализовать трубопровод невозможно. В моем проекте я создаю новый поток POSIX (прочитайте документацию Apple, как это сделать). В дочернем потоке будет использоваться файловый дескриптор, созданный pipe() с родительским потоком. Реальные и родительские потоки могут связываться через каналы. Например, мой дочерний поток dup2() fd [1] до его стандартного вывода. Таким образом, любой стандартный вывод может быть обнаружен в родительском потоке. Аналогично fd [0] и стандартного ввода.
псевдокод (я не имею код доступен, но вы получите идею):
int fd[2];
pipe(fd);
create_posix_thread(&myThread, fd);
char buffer[1024];
read(fd[0], buffer, 1024);
printf("%s", buffer); // == "Hello World"
void myThread(int fd[])
{
dup2(fd[1], STANDARD_OUTPUT);
printf("Hello World");
}
Стратегия очень удобно, если вы хотите использовать сторонние библиотеки в приложении iPhone. Однако проблема заключается в том, что стандартная отладка с использованием printf() больше недоступна. В моем проекте я просто перенаправил все отладочные выходы на стандартную ошибку, XCode отобразит выходы на свою консоль.
Вы правы. Я пытался использовать fork(), потому что это была стандартная практика в UNIX. Кроме того, если мы напечатаем f() в другом процессе, это не повлияет на дочерний процесс. iPhone не позволяет этого, поэтому я решил переключиться на несколько потоков. – SmallChess