日期:2014-05-16  浏览次数:20616 次

求教,UNP2 FIFO章节的问题
UNP2(第二版)46~47页的那段话看不懂~~

例子为:一个简单的服务器打开一个众所周知的FIFO来读,等待客户写消息。

书上说:打开该管道两次,一次读一次写,readfifo描述符用于读,dummyfd则从来不用

  readfifo = open(FIFO, O_RDONLY, 0);
  dummyfd = open(FIFO, O_WRONLY, 0);

问题1:(书上原文)如果不这么做(打开管道两次), 那么每当一个客户终止,该FIFO就变空,服务器read返回0,表示一个文件结束符。我们不得不close该FIFO,并重新打开。

问题2:如果我们总有一个该FIFO的描述符打开用于写,那么当没有客户时,服务器read一定不会返回0以指示读到一个文件结束符。相反服务器只是阻塞在read调用中,等待。

红色部分不太理解,望大家赐教!

------解决方案--------------------
因为对于同一个FIFO, 多个写打开的情况下, 只有所有写关闭, 读端才能返回EOF, 所以我们特意的保持一个写打开FD, 这样在下面的编码中就不必担心写端全部关闭读端返回EOF.
------解决方案--------------------
只要有人(不管是自己,还是别人)打开这个FIFO,读操作就不会读到EOF