Вилка () на iPhone - PullRequest
       32

Вилка () на iPhone

3 голосов
/ 01 сентября 2010

Разрешает ли iPhone SDK fork() и pipe(), традиционные функции Unix?Я не могу заставить их работать.

Изменить

Проблема решена.Здесь я предлагаю решение любому, кто сталкивается с проблемами, похожими на меня.Я был вдохновлен ответами в этой теме.

В 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 отображал результаты на своей консоли.

Ответы [ 2 ]

6 голосов
/ 01 сентября 2010

Вы не можете использовать fork (), но вы можете использовать столько потоков, сколько захотите, и теперь у вас даже есть GCD на iPhone, чтобы поддерживать разумное использование потоков.

Почему вы хотите использовать fork () вместо использования большего количества потоков?

4 голосов
/ 01 сентября 2010

Неа.Вы также не можете исполнить.У вас 1 процесс.

...