如何解决dup2() 在子进程中运行 exec
我正在研究 dup2()
,并在不同的书籍中找到了一些示例。探索不同的例子,我发现当父母和孩子使用 pipe()
共享内存时,他们不需要在标准 I/O 上 dup2()
从管道写入或读取。然而,当子进程想要 exec()
某些东西时,它 dup2()
标准 I/O。在后一种情况下,为什么子进程通过 dup2()
重定向 I/O?事实上,在这两种情况下,父母和孩子都使用 pipe
进行交流。我的意思是,不使用 dup2()
,他们已经可以交流了,所以我们为什么要添加 dup2()
?
没有dup2()
的子进程:
pipe(f_des);
if(fork()==0){
close(f_des[1]);
if (read(f_des[0],message,BUFSIZ) != -1) {
cout << "Message received by child: [" << message
<< "]" << endl;
cout.flush();
} else {
perror("Read"); return 3;
}
带有 dup2()
的子进程:
pipe(f_des);
if(fork() ==0 ) {
dup2( f_des[WRITE],fileno(stdout));
close(f_des[READ] );
close(f_des[WRITE]);
execl("/usr/bin/last","last",(char *) 0);
return 3;}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。