gpt4 book ai didi

c++ - 命名管道 : How to block until closed write side is reopened?

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:14 24 4
gpt4 key购买 nike

我有一个正在运行的进程,它基本上用作缓存并通过命名管道与其他进程通信。这些其他进程可能会定期向缓存进程发送消息。现在原则上在缓存过程中对我有用的是:

while(true) {
int read_status = read(fifo_fd, buffer, BUFFER_SIZE);
if (read_status > 0) {
//at least a byte was read -> do something with the message
}
}

但这在性能方面显然很糟糕,因为 read() 将在 EOF 上立即返回,一旦管道。 (编辑)我收到 EOF,因为写入过程可能会多次执行以下循环:open() write() close()

如果管道中除了 EOF 之外没有其他字符,我希望整个循环被阻塞。我还研究了 select()poll() ,它们都不会阻塞 EOF


我为什么需要这个?

缓存进程应该是一个守护进程,其他进程应该在用户调用各自的二进制文件时与这个守护进程通信。

最佳答案

打开你的管道读/写而不是只读。当外部编写器关闭它时,这将防止 EOF。

或者,当收到 EOF 时,关闭管道并重新打开它。

关于c++ - 命名管道 : How to block until closed write side is reopened?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25536750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com