【问题标题】:Having a trouble with opening FIFO in C在 C 中打开 FIFO 时遇到问题
【发布时间】: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(有时答案是肯定的,他们应该;有时,这不是一个好主意)。

标签: c file-io fifo mkfifo


【解决方案1】:

我猜对了:)

我必须让打开的进程等到其他进程打开 FIFO 进行读取(这将是一个阻塞的读取)。通过在写入进程上进行睡眠,我将确保其他进程将打开以进行读取。 .

【讨论】:

    【解决方案2】:

    回答您有关限制的问题 - Linux 中的默认值是一个进程的 1024 个文件描述符。您的问题可能是没有打开第二个 FIFO 进行读取,因此打开了写入块。

    【讨论】:

    • 哦,对不起,我忘了说我正在尝试打开两个不同的 FIFO :)
    • 啊,你确定第二个fifo也打开了读取?否则 open for writing 会阻塞。
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多