0

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

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

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

谢谢你的帮助。

4

2 回答 2

3

你想O_NONBLOCK在你的open(2)旗帜,看到fifo(7)。然后使用select(2)orpoll(2)等​​待输入(有超时)。

于 2011-07-29T15:14:21.440 回答
2

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

于 2011-07-29T15:07:55.803 回答