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会将输出显示到其控制台.