微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

dup2() 在子进程中运行 exec

如何解决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 举报,一经查实,本站将立刻删除。