我可以在C中锁定和解锁fifo(命名管道)吗?

时间:2013-12-04 09:16:49

标签: c pipe nonblocking

我有两个进度,p1p2,以及两个进度之间ipc的命名管道var。 我想在var写入时锁定p2的{​​{1}} rw,并在p1写完后解锁var

PS:

我使用select进行非阻止,因此当p1p2添加任何内容时,p1将变得可读。当var完成时,我可以让var变得可读写?

1 个答案:

答案 0 :(得分:0)

您可以使用信号(例如SIGUSR1)。编写器管道非阻塞(因此当管道变满时它不会阻塞),写入直到它不能再写入,然后将信号发送到另一个进程。读取过程读取所有(从其非阻塞管道),然后向写入者发送信号,然后写入者继续写入。

然而,这确实不需要。作者可以写,读者只读。如果管道变满,编写器将阻塞,直到它可以写更多。对于读者来说,如果没有什么可读的,它将会阻止。然后当编写器写入所有数据时,它将简单地关闭管道的末尾,读者将通过read调用来检测,该调用返回零字节读取。