繁体   English   中英

是否有类似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创建了管道,并且所有操作都被阻塞(在尝试打开以进行写入之前无法打开fifo进行读取,而vv不幸的是,有时由于子进程运行的程序中的错误,我的子进程不会停止。任务来解决此外部程序中的此错误,但我想确保父进程不会在阻塞的打开fifo调用中无限期停止,而是在一段时间后继续运行(不读取管道中的值)。

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

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

谢谢你的帮助。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM