对于execl,dup2()是否必需 [英] Is dup2() necessary for execl
本文介绍了对于execl,dup2()是否必需的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用管道时是否需要将stdin
替换为pipe
结尾?
我有一个应用程序:-
- 创建管道,
- 派生一个子进程,然后
- execl()新子进程中的新进程映像,
但我遇到了两个概念性问题。
是否需要用
dup()
或dup2()
替换stdin
?显然,只使用管道中的fd
会更容易。(我不需要对此有什么了解)如果您只能使用管道中的
fd
,当execl采用char *
参数时,如何使用execl()
传递整数fd
?
我很难弄清楚在执行execl()之后什么仍然是打开的,以及如何从新执行的进程访问该信息。
推荐答案
您可能正在尝试将数据馈送到系统上存在的子进程,但如果您也在写入子进程,则不需要使用dup()
和stdin
。
execl()
使父进程中所有打开的文件描述符保持打开状态,以便您可以:
int fd[2];
pipe(fd);
if (fork() == 0)
{
char tmp[20];
close(fd[1]);
snprintf(tmp, sizeof(tmp), "%d", fd[0]);
execl("client", tmp, NULL);
exit(1);
}
在客户端的代码中:
int main(int argc, char** argv)
{
int fd = strtod(argv[1], NULL, 10);
/* Read from fd */
}
这篇关于对于execl,dup2()是否必需的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文