2014-09-04 108 views
0

我刚刚了解pipe,fifo和我有一个问题。Pipe,Fifo,读取()和写入()函数

如果一个程序打开一个阅读管道,另一个程序打开一个管道进行书写,会发生什么情况。这两个程序以并列方式运行。假设第一个程序试图读取表单管道,但没有信息,所以在第二个程序写入内容之前它会被阻塞。

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

谢谢!

回答

2

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

+0

按照我的理解,你解释错了 - 问题明确指出“这次有一些信息来自上次”。 - 如果您为读取功能提供小缓冲区长度,可能会发生这种情况。但也许这个问题写得不好。 – Sebastian 2014-09-07 20:49:52

+0

@塞巴斯蒂安 - 一致认为这个问题措辞不佳,但由于OP接受了我的回答,所以我似乎正确地解释了他的问题。 – DoxyLover 2014-09-07 21:07:29

1

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