首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dup2( )导致子进程提前终止

dup2( )导致子进程提前终止
EN

Stack Overflow用户
提问于 2013-03-08 05:17:20
回答 1查看 338关注 0票数 1

因此,我正在编写一个程序,其中包括创建两组管道,以便父进程可以写入子进程&子进程可以立即返回……

我的子进程有以下代码:

代码语言:javascript
复制
if(pid==0){  //child process
        cout << "executing child" << endl;
        close(fd1[WRITE_END]);
        close(fd2[READ_END]);
        if(dup2(fd1[READ_END],STDIN_FILENO) < 0 || dup2(fd2[WRITE_END],STDOUT_FILENO) < 0){
            cerr << "dup2 failed" << endl;
            exit(1);
        }
        cout << "test output" << endl;
        close(fd2[WRITE_END]);
        close(fd1[READ_END]);
        read(fd1[READ_END],buf,BUFFER_SIZE);
        cout << "Child process read " << buf << endl;
        execl("/bin/sort", "sort", "-nr", NULL);


    } else {  //... parent process

当我运行我的程序时,我从子进程得到的输出只有executing child,但没有test output。但是,当我删除处理dup2调用的if语句时,我的输出确实包含test output

关于为什么dup2导致我的子进程无法完成终止,您有什么想法吗?

(顺便说一下,最初,我的两个dup2是在单独的if语句中完成的……当我将测试输出放在dup2(fd1[READ_END],STDIN_FILENO) < 0测试下面时,它会输出,但当我把它放在另一个dup2条件测试下面时,它就不会输出了,所以我确信这就是我的问题所在。)

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 05:23:08

对dup2(fd2WRITE_END,STDOUT_FILENO)的调用将STDOUT (由C++ cout流使用)连接到fd2管道。因此,“测试输出”被写入管道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15281921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档