是否有像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在试图打开写和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()
。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 循环无限运行C++解决骑士之旅问题
- 过载'operator new'如何导致无限循环?
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 在Qt中实现无限可缩放的画布
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 交换运算符 + 重载会导致无限递归
- 多个分叉进程无限循环
- 编写并执行一个C或C++程序,该程序可创建无限数量的进程
- 在c++中,在两个进程之间拥有无限对象队列的最佳方式
- 无法在具有无限循环的 boost.python 模块中通过 Ctrl-c 杀死进程