当前位置: 技术问答>linux和unix
求教,UNP2 FIFO章节的问题
来源: 互联网 发布时间:2017-02-08
本文导语: UNP2(第二版)46~47页的那段话看不懂~~ 例子为:一个简单的服务器打开一个众所周知的FIFO来读,等待客户写消息。 书上说:打开该管道两次,一次读一次写,readfifo描述符用于读,dummyfd则从来不用 r...
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来读,等待客户写消息。
书上说:打开该管道两次,一次读一次写,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
|
因为对于同一个FIFO, 多个写打开的情况下, 只有所有写关闭, 读端才能返回EOF, 所以我们特意的保持一个写打开FD, 这样在下面的编码中就不必担心写端全部关闭读端返回EOF.