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

关于unix下的fifo的疑问
看unix网络编程:线程间的通信,在第四章的第七小节看到fifo时,有个表格说如果fifo是阻塞状态下,如果fifo现有打开操作是打开来写,那么当前操作open fifo只读的话或直接返回,否则的话,fifo会阻塞到fifo打开来写为止。下面又说如果fifo的现有打开操作是打开来读的话,当前操作open fifo 只写的话,成功返回,否则的话,阻塞到fifo打开读为止。我顿时就迷茫了,总有一个操作要先完成的吧,按上面说的,写要等读,读又要等写,那不是死锁了啊?

------解决方案--------------------
阻塞情况下,两个进程或线程 分别执行 读打开或写打开,第一个打开的进程或线程, 不管是读还是写打开,都是阻塞的,直到另外一个进程或线程 执行相对的打开操作。就是这个意思。

如果只有一个进程想既打开读又打开写的话,则需要在 打开时 第一个操作指定为 非阻塞的。这样就不会苦等了 呵呵
------解决方案--------------------
就是读打开起码需要一个写打开,写打开起码需要一个读打开.


一旦两者都打开了, 就都不阻塞了, 继续往下执行.
------解决方案--------------------
有人是读,有人是写。

如果你先启动读者,再启动写者,那么在写者启动之前,读者将临时阻塞。
写者启动之后,读者将不再阻塞,写者也成功返回
------解决方案--------------------
现在使用System V 版本的应用还大量存在,建议两者都熟悉一下。

上面你说的那个问题,能不能提供一个相对完整的测试程序,方便重现问题
------解决方案--------------------
posix,system v都要掌握噢。
------解决方案--------------------
用lz的小程序试验了一下,先启动服务器,再启动客户端,两者都阻塞了。。
------解决方案--------------------
应该是阻塞的啊!呵呵
要不你在open之后分别都增加日志试试