我正在 OSX 上的 Xcode 中编写 C 程序。
(父)程序必须启动一个新的(子)进程,该进程通过标准输入接收其输入并将结果输出到标准输出。因此父进程将数据写入子进程的标准输入,父进程从子进程的标准输出读取结果。
在 Windows 上,我使用 CreateProcess 来执行上述操作,但我不确定它是如何在 C 中的 OSX 上完成的。
我相信我应该使用 exec 来启动进程,但我看不到我如何重定向 exec 启动的可执行文件(子进程)的标准输入和标准输出。从阅读手册来看,如果我使用 exec,子进程似乎也将成为父进程。子进程和父进程必须并行运行,以便父进程可以在需要时对子进程进行读写。
那里有一位好心的 OSX C 专家可以给我一个简短的例子来说明上述是如何完成的吗?
谢谢
编辑
我想我明白。但是如果子进程是一个无限循环,等待标准输入的输入,那么它就不会变成“僵尸”,对吧?
子进程基本上是这样做的:
1. Read data from stdin (i.e. blocked until data is received)
2. Process data
3. Write result to stdout
4. Goto 1
看完你的帖子后,我发现了这个页面:
http://www.jukie.net/~bart/snippets/popenRWE/popenRWE.c.html
但是,我在启动 .exe(子进程)时遇到问题
在终端中,我会像这样启动 .exe:
./myApp.exe someParam1 someParam2 someParam3
API 如下所示:
popenRWE(int *rwepipe, const char *exe, const char *const argv[])
我猜第二个论点应该是:
const char* exe = "./myApp.exe";
第三个论点应该是:
char* p0 = "./myApp.exe";
char* p1 = "someParam1";
char* p2 = "someParam2";
char* p3 = "someParam3";
char** argv[4] = {p0, p1,p2,p3};
我对吗?