![](/img/trans.png)
[英]How to make my C++ infinite loop program only receive linux pipe input just once for one time?
[英]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创建了管道,并且所有操作都被阻塞(在尝试打开以进行写入之前无法打开fifo进行读取,而vv不幸的是,有时由于子进程运行的程序中的错误,我的子进程不会停止。任务来解决此外部程序中的此错误,但我想确保父进程不会在阻塞的打开fifo调用中无限期停止,而是在一段时间后继续运行(不读取管道中的值)。
所以我需要像WaitNamedPipe函数之类的东西。 该函数将等待,直到超时间隔过去或指定的命名管道实例可用于连接。 http://ist.marshall.edu/ist480acp/namedpipes.html#WaitNamedPipe
当然,也可以使用另一种方法来实现此目的。 我在父进程中尝试了一个循环,在该循环中,它总是尝试打开管道进行读取,然后在无法打开时进入睡眠状态。 这似乎没有任何效果,可能是因为父进程在第一次打开调用时阻塞了。
谢谢你的帮助。
您可以使用非阻塞管道,并使用超时调用select()
。 或者,您可以使用阻塞的read()
调用,该调用之前调用了alarm()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.