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

我有两个进度, p1p2 ,以及一个名为pipe var的ipc,介于两个进度之间。
我想在p1写入时锁定var的rw为p2 ,在p1写完时解锁var

PS:

我使用select进行非阻塞,所以当p1把任何东西放到var时, p2会变得可读。可以在p1写完后让var变得可读吗?

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

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