iPhone上的Fork()

iPhone上的Fork(),iphone,unix,pthreads,fork,pipe,Iphone,Unix,Pthreads,Fork,Pipe,iPhone SDK是否允许传统unix功能fork()和pipe()?我似乎无法让它们工作 编辑 问题解决了。在这里,我为任何遇到类似问题的人提供了一个解决方案。我被这条线索中的答案所启发 在iPhone中,没有办法进行分叉。然而,实现管道并不是不可能的。在我的项目中,我创建了一个新的POSIX线程(阅读苹果的文档了解如何做到这一点)。子线程将与父线程共享由pipe()创建的文件描述符。子线程和父线程可以通过管道进行通信。例如,我的子线程dup2()fd[1]将被复制到其标准输出。因此,任何标

iPhone SDK是否允许传统unix功能
fork()
pipe()
?我似乎无法让它们工作

编辑

问题解决了。在这里,我为任何遇到类似问题的人提供了一个解决方案。我被这条线索中的答案所启发

在iPhone中,没有办法进行分叉。然而,实现管道并不是不可能的。在我的项目中,我创建了一个新的POSIX线程(阅读苹果的文档了解如何做到这一点)。子线程将与父线程共享由pipe()创建的文件描述符。子线程和父线程可以通过管道进行通信。例如,我的子线程dup2()fd[1]将被复制到其标准输出。因此,任何标准输出都可以在父线程中捕获。类似于fd[0]和标准输入

伪代码(我没有可用的代码,但你知道了):


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

否。你也不能执行。你有一个进程。

你不能fork(),但是你可以使用任意多的线程,现在你甚至在iPhone上安装了GCD来帮助保持线程的合理使用


为什么要使用fork()而不是使用更多线程?

你说得对。我尝试使用fork(),因为这是UNIX中的标准实践。另外,如果我们在另一个进程中使用printf(),它不会影响子进程。iPhone不允许这样,所以我决定切换到多线程。
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");
}