我可以在C中锁定和解锁fifo(命名管道)吗?
我有两个进度, p1
和p2
,以及一个名为pipe var
的ipc,介于两个进度之间。
我想在p1
写入时锁定var
的rw为p2
,在p1
写完时解锁var
。
PS:
我使用select进行非阻塞,所以当p1
把任何东西放到var
时, p2
会变得可读。可以在p1
写完后让var
变得可读吗?
您可以使用信号(例如SIGUSR1
)。 编写器管道非阻塞(因此它不会在管道变满时阻塞),写入直到它不能再写入,然后将信号发送到另一个进程。 读取过程读取所有(从其非阻塞管道),然后向写入者发送信号,然后写入者继续写入。
但是,这确实不需要。 作者可以写,读者只读。 如果管道变满,编写器将阻塞,直到它可以写更多。 对于读者来说,如果没有什么可读的话,它会阻止。 然后当编写器写入所有数据时,它将简单地关闭管道的末端,读取器将通过read
调用检测到read
零字节。