将调用从spawn转换为C语言中的fork-exec

时间:2011-07-05 23:49:46

标签: linux qnx

我的代码在Linux中看起来像这样:

return_code= spawnp(cmd, 3, fd_map, NULL, argv, environ);

我需要将它从QNX转换为Linux - 所以我需要使用fork-exec,因为spawn在Linux中不可用。 1)怎么做?这是正确的吗 ?

pid = fork();
if (pid ==0) /* child */
    exec(cmd, argv, environ);

2)如何将在spawn中传递的参数fd_map和“3”传递给exec?

2 个答案:

答案 0 :(得分:1)

我不知道“3”是做什么的。

如果要更改子进程可用的文件描述符,请不要在调用execfork时执行此操作,但可以通过调用close来完成此操作,dup2等。函数posix_spawn基本上是为你做的,在Linux / glibc上,它是使用forkexec实现的(所以你可以阅读源码代码...)

pid = fork();
if (!pid) {
    // close, dup2 go here
    exec(...);
    // error
}

答案 1 :(得分:0)

3表示您传入fd_map的文件描述符的数量,在spawnp()调用中,它允许您方便地仅选择要传递给子进程的文件描述符。

因此,在调用fork()之后,您将拥有子进程中的所有文件描述符,以便您可以关闭那些您不感兴趣的文件描述符,然后假设文件描述符未标记为CLOEXEC (关闭exec)他们也将继续执行exec()'ed代码。

请注意,如果您的应用程序是多线程的,fork()将失败,因为在最新版本之前,QNX不支持分支线程进程。