问题描述
我正在研究 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 (将#修改为@)