是否有类似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)

我的C ++程序中有一个命名管道。子进程在其中写入一个值,而父进程则在其中读取一个值。我由mkfifo创建了管道,并且所有操作都处于阻塞状态(在尝试打开以进行写入和v.v之前,无法将fifo打开以进行读取。
不幸的是,有时由于子进程运行的程序中的错误,我的子进程没有停止。修复此外部程序中的此错误不是我的任务,但我想确保父进程不会在阻塞的打开fifo调用中无限期停止,而是会在一段时间后继续运行(而不读取管道中的值) )。

所以我需要像WaitNamedPipe函数之类的东西。该函数将等待,直到超时间隔过去或指定的命名管道实例可用于连接。 http://ist.marshall.edu/ist480acp/namedpipes.html#WaitNamedPipe

当然,也可以使用另一种方法来实现此目的。我在父进程中尝试了一个循环,在该循环中,它总是尝试打开管道进行读取,然后在无法打开时进入睡眠状态。
这似乎没有任何效果,可能是因为父进程在第一次打开调用时阻塞了。

谢谢你的帮助。


您需要在open(2)标志中使用O_NONBLOCK,请参见fifo(7)。 然后使用select(2)poll(2)等待输入(带有超时)。


您可以使用无阻塞管道和带有超时的select()调用。 或者,您可以使用在其之前调用了alarm()的阻塞read()调用。