dup2() 在子进程中运行 exec

问题描述

我正在研究 dup2(),并在不同的书籍中找到了一些示例。探索不同的例子,我发现当父母和孩子使用 pipe() 共享内存时,他们不需要在标准 I/Odup2() 从管道写入或读取。然而,当子进程想要 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 (将#修改为@)