为什么在下面的代码中,没有显示输出。当我注释以下行:“ close(pipefd1 [0]);” ,那么代码运行良好,否则即使在终端上也不打印“检查”。
#include<bits/stdc++.h>
using namespace std;
#include <stdlib.h>
#include <unistd.h>
int main(){
int pipefd1[2];
char buff[100]="hey there";
char be[100];
pipe(pipefd1);
close(pipefd1[0]);
cout<<"checking";
write(pipefd1[1],buff,100);
close(pipefd1[1]);
read(pipefd1[0],be,100);
close(pipefd1[0]);
cout<<be;
}
答案 0 :(得分:1)
但是,问题是您在没有读取器的情况下写入管道。对于specification of POSIX write
,当仅在一端打开的情况下写入管道时,应引发错误:
[EPIPE]
试图写入未打开以供任何进程读取的管道或FIFO,或仅一端开放的管道或FIFO。 SIGPIPE信号也应发送到线程。
此错误导致您的程序直接终止,从而阻止了其余代码的执行。
由于大多数时间都是在缓冲标准输出的编写过程中,程序没有时间刷新输出,因此看起来好像未执行带有cout << "checking";
的行。如果在对输出进行“检查”之后写了std::cout.flush();
,那么您会在终端上看到它。