因此,我正在编写一个程序,其中包括创建两组管道,以便父进程可以写入子进程&子进程可以立即返回……
我的子进程有以下代码:
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条件测试下面时,它就不会输出了,所以我确信这就是我的问题所在。)
提前感谢
发布于 2013-03-08 05:23:08
对dup2(fd2WRITE_END,STDOUT_FILENO)的调用将STDOUT (由C++ cout流使用)连接到fd2管道。因此,“测试输出”被写入管道。
https://stackoverflow.com/questions/15281921
复制相似问题