iphone - iPhone 上的 Fork()

标签 iphone unix pthreads fork pipe

iPhone SDK 是否允许传统的 UNIX 函数 fork()pipe() ?我似乎无法让它们工作。

编辑

问题已解决。在这里,我为遇到与我类似问题的任何人提供解决方案。我受到了这个帖子中的答案的启发。

在 iPhone 中,无法 fork 进程。然而,实现管道并非不可能。在我的项目中,我创建了一个新的 POSIX 线程(请阅读 Apple 的文档以了解如何执行此操作)。子线程将与父线程共享由 pipeline() 创建的文件描述符。子线程和父线程可以通过管道进行通信。例如,我的子线程 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 会将输出显示到其控制台。

最佳答案

你不能 fork(),但你可以使用任意数量的线程,现在 iPhone 上甚至有 GCD 来帮助保持线程的合理使用。

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

关于iphone - iPhone 上的 Fork(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3619252/

相关文章:

iphone - 具有多个注释的 Mapkit

linux - SIGHUP 重新加载配置

c - 从c程序中查找后台进程的pid

javascript - 如何在c++中使用html、javascript

c - 如何使用 posix 信号正确挂起多个线程?

c - 在线程中使用参数

iphone - Xcode如何在另一个项目中添加一个静态库项目?

ios - 无法通过在 Swift 3.2 中解析其显示为字符串格式来获取数组

iphone - 在应用商店更新应用程序的新版本以及何时更改应用程序详细信息?

无法将值传递给 C 中的线程