iPhone上的Fork()

Sma*_*ess 3 unix iphone fork pthreads pipe

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");
}
Run Code Online (Sandbox Code Playgroud)

如果您想在iPhone应用程序中使用第三方库,该策略非常方便.但是,问题是使用printf()的标准调试不再可用.在我的项目中,我只是将所有调试输出指向标准错误,XCode会将输出显示到其控制台.

Ken*_*ner 6

你不能fork()但你可以使用尽可能多的线程,现在你甚至在iPhone上使用GCD来帮助保持线程使用的合理性.

为什么你想fork()而不是只使用更多的线程?