【问题标题】:Pipe, Fifo, read() and write() functionsPipe、Fifo、read() 和 write() 函数
【发布时间】:2014-09-04 19:44:15
【问题描述】:

我只是在学习管道,fifo,我有一个问题。

如果一个程序打开一个管道进行读取,而另一个程序打开一个管道进行写入,会发生什么情况。两个程序并行运行。假设第一个程序尝试读取表单管道,但没有任何信息,所以它被阻塞,直到第二个程序写一些东西。

在第二步中,第一个程序更快,并尝试再次读取管道。这次有一些上次的信息。程序做什么?它是否读取了上次的信息?

谢谢!

【问题讨论】:

    标签: c linux kernel


    【解决方案1】:

    如果我正确解释了您的问题,答案是否定的。第一次读取的任何信息都被消耗并且在管道中不再可用。如果没有进一步写入管道,则第二次读取将阻塞。

    【讨论】:

    • 据我了解,您的解释是错误的——问题明确指出“这次有一些上次的信息。” - 如果您为读取函数提供较小的缓冲区长度,则可能会发生这种情况。但也许问题写得不好。
    • @Sebastian - 同意这个问题措辞不当,但由于 OP 接受了我的回答,看来我正确地解释了他的问题。
    【解决方案2】:

    是的,从管道读取的程序将按照其他程序写入的顺序读取所有内容,但不一定以相同的块大小。如果有可用的东西,它会读取它(或适合读取缓冲区的尽可能多的东西)。

    【讨论】:

      猜你喜欢
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2019-04-03
      相关资源
      最近更新 更多