是否有像WaitNamedPipe这样的函数或在c++ /linux上实现此功能的方法?(因此进程不会在管道上阻塞无限时

Is there a function like WaitNamedPipe or a way to realize this on C++/linux? (so the process is not blocking on the pipe for infinite time)

本文关键字:进程 无限 方法 管道 实现 WaitNamedPipe 函数 是否 linux c++ 功能      更新时间:2023-10-16

在我的c++程序中有一个命名管道。子进程向其中写入值,父进程读取该值。我通过mkfifo创建了管道,所有的操作都是阻塞的(fifo在试图打开写和v.v.之前不能打开读取)。不幸的是,有时我的子进程不会因为子进程运行的程序中的错误而停止。在这个外部程序中修复此错误不是我的任务,但我想确保父进程不会在阻塞的开放fifo调用上无限时间停止,而是在一段时间后继续(不读取管道中的值)。

我需要的是WaitNamedPipe函数。此函数将等待,直到超时间隔结束或指定的命名管道的实例可用于连接。http://ist.marshall.edu/ist480acp/namedpipes.html WaitNamedPipe

实现这一点的另一种方法当然也是有效的。我在父进程中尝试了一个循环,其中它总是尝试打开管道进行读取,然后在不可能打开时休眠。这似乎没有效果,可能是因为父进程阻塞了第一个公开调用。

谢谢你的帮助

您希望O_NONBLOCK在您的open(2)标志中,请参阅fifo(7)。然后使用select(2)poll(2)等待输入(有超时)

您可以使用非阻塞管道和select()超时调用。或者您可以使用阻塞read()调用,在它之前调用alarm()