【发布时间】:2011-06-01 12:10:25
【问题描述】:
我在 C 中打开 FIFO 时遇到问题。首先我使用 mkfifo() 函数创建了它们,权限为:0777,当我尝试打开它们时,它只成功打开了第一个 FIFO,然后是进程将卡在打开第二个 FIFO,这是我的代码:
fd1 = open("FIFO1_PATH", O_WRONLY );
fd2 = open("FIFO2_PATH", O_WRONLY );
这不会被执行,但是一旦我评论第二行,它就会执行!每个进程打开 FIFO 的数量是否有限制?我不知道为什么会这样。我花了 3 个小时试图找出问题所在,但没有任何结果:(
【问题讨论】:
-
LOL .. 我遇到了问题 :D .. 我应该用“O_NONBLOCK”选项打开它们,因为它会永远阻塞在第一个 open() 中(如果我们认为没有其他进程会打开阅读)..谢谢
-
@user 对你有好处!请发布您的解决方案作为答案。
-
我遇到了另一个问题 :(,打开会执行但会返回 -1..
-
如果东西返回 -1,检查 errno(或例如调用 perror() )以了解事情失败的原因
-
请注意,您永远不想执行 FIFO,因此没有充分的理由在权限上设置“x”位;如果必须,请使用 666 权限;担心整个世界和他的狗是否应该能够写入您的 FIFO(有时答案是肯定的,他们应该;有时,这不是一个好主意)。