iPhone 上的 Fork()

发布于 2024-09-16 17:22:17 字数 782 浏览 6 评论 0原文

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

编辑

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

在 iPhone 中,无法分叉进程。然而,实施管道并非不可能。在我的项目中,我创建了一个新的 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 会将输出显示到其控制台。

Does the the iPhone SDK allow fork() and pipe(), the traditional unix functions? I can't seem to make them work.

Edit

Problem solved. Here, I offer a solution to anybody who encounters problems similar to me. I was inspired by the answers in this thread.

In iPhone, there is no way to fork a process. However, it's not impossible to implement piping. In my project, I create a new POSIX thread (read Apple's documentation for how to do this). The child thread would share a file descriptor created by pipe() with the parent thread. Child and parent threads can communicate via pipes. For example, my child thread dup2() fd[1] to its standard output. So any standard output could be caught in the parent thread. Similar to fd[0] and standard input.

Pseudocode (I don't have the code available but you get the idea):

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");
}

The strategy is very handy if you want to use a third-party library within your iPhone application. However, a problem is that standard debug using printf() is no longer available. In my project, I simply directed all debug outputs to standard error, XCode would display the outputs to its console.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

本王不退位尔等都是臣 2024-09-23 17:22:17

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

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

You can't fork() but you can use as many threads as you like, and now you even have GCD on the iPhone to help keep thread use reasonable.

Why do you want to fork() instead of just using more threads?

掀纱窥君容 2024-09-23 17:22:17

没有。您也无法执行。你有 1 个进程。

Nope. You also can't exec. You have 1 process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文