为什么在下面的代码中,没有显示输出。当我评论该行时:“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;
}
但问题是你在没有读卡器的情况下写入管道。根据specification of POSIX write
,当写入只打开一端的管道时,应该引发错误:
[EPIPE]
尝试写入未通过任何进程读取的管道或FIFO,或只打开一端的管道或FIFO。 SIGPIPE信号也应发送给线程。
此错误会导致程序直接终止,从而阻止执行剩余的代码。
由于写入标准输出大多数时候是缓冲的,程序没有时间刷新输出,这使得它看起来好像没有执行cout << "checking";
的行。如果你在写'输入'后写了std::cout.flush();
,你会在终端上看到它。