gpt4 book ai didi

c++ - dup2( ) 导致子进程提前终止

转载 作者:行者123 更新时间:2023-11-28 03:21:35 25 4
gpt4 key购买 nike

所以我正在编写一个涉及创建 2 组管道的程序,以便父进程可以写入子进程并且子进程可以立即返回...

我的子进程有以下代码:

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 条件下方时则不会测试,所以我确信这就是我的问题所在)

提前致谢

最佳答案

对 dup2(fd2[WRITE_END],STDOUT_FILENO) 的调用将 STDOUT(由 C++ cout 流使用)连接到您的 fd2 管道。所以“测试输出”被写入管道。

关于c++ - dup2( ) 导致子进程提前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com