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