求教,UNP2 FIFO章节的问题

起个昵称真难 2012-03-05 02:30:05
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调用中,等待。

红色部分不太理解,望大家赐教!
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2012-03-07
  • 打赏
  • 举报
回复
普通文件肯定是不适用的
起个昵称真难 2012-03-07
  • 打赏
  • 举报
回复
这个规则对其它情况也适用么?

比如一个普通文件描述符,普通管道,或套接字。

只要有一个人打开来写,则读端就不会读到EOF?
justkk 2012-03-05
  • 打赏
  • 举报
回复
只要有人(不管是自己,还是别人)打开这个FIFO,读操作就不会读到EOF
qq120848369 2012-03-05
  • 打赏
  • 举报
回复
因为对于同一个FIFO, 多个写打开的情况下, 只有所有写关闭, 读端才能返回EOF, 所以我们特意的保持一个写打开FD, 这样在下面的编码中就不必担心写端全部关闭读端返回EOF.

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧