FIFO不会在读取时阻塞

为什么下面的程序不会阻塞第二次read通话?

 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,pipe道是用mknod testfifo p创build的。

Solutions Collecting From Web of "FIFO不会在读取时阻塞"

我发现,从另一个stackoverflow问题,我应该打开和关闭“服务器”管道,在这种情况下父进程的管道,每次; 所以这是正确的代码:

 int pid = fork(); if(pid) { char buf[20]; while(1) { int fifo = open("testfifo", O_RDWR); read(fifo, buf, 15); close(fifo); puts(buf), fflush(stdout); } } else { int fifo = open("testfifo", O_WRONLY); write(fifo, "teststring", 15); close(fifo); } 

您没有关闭该文件

编辑:删除了一些尴尬的东西。