【发布时间】:2018-03-04 09:54:05
【问题描述】:
假设我有一个命名管道:
mypipe="foobar"
mkfifo $mypipe
...稍后说我想给它写信
echo "foo" > $mypipe
如果没有人在听,我很确定这个回声呼叫会挂起。在我进行 echo 调用之前,有没有办法确定是否有人正在从管道中读取数据?
【问题讨论】:
-
您似乎正在为比赛条件做好准备。在有人准备好读取数据之前,通话一直挂着有什么问题?
-
我同意 re:竞态条件,但对于我的用例,如果有人还没有准备好阅读,那么他们将永远不会准备好,基本上,所以我会在尝试写入之前退出/返回
-
如果读者在
fuser调用和echo调用之间死掉了,你仍然会遇到同样的问题。检查fuser这样可以避免echo在大多数情况下超时是一种有效的优化,但您仍然必须应对echo挂起的可能性。
标签: bash named-pipes fifo mkfifo