爲什麼下面的程序不能在第二read
呼叫阻止?FIFO不會阻止上閱讀
int pid = fork();
if(pid) {
int fifo = open("testfifo", O_RDWR);
char buf[20];
while(1) {
read(fifo, buf, 10);
puts(buf);
}
} else {
int fifo = open("testfifo", O_WRONLY);
write(fifo, "teststring", 10);
close(fifo);
}
return 0;
第二read
呼叫繼續返回0
即使FIFO變成空的,它應該在read
呼叫阻塞。
我錯過了什麼嗎?
的操作系統是Windows和管道已經用mknod testfifo p
創建。
*不*忽略read()的返回值。將0解釋爲「文件結尾」,將<0解釋爲錯誤。你應該在這裏得到eof,你關閉了管道。 –
@Simone對我狡猾的編輯道歉 - 顯然不打算破壞你的問題! – razlebe
@Hans但我想要的是阻塞讀等待其他進程在管道 – Simone