C:如何检测execvp是否在等待标准输入?

时间:2016-12-13 14:56:35

标签: c pipe fork exec stdin

我做了一个启动命令的守护进程。

如果execvp函数等待标准输入(例如cat,grep,wc),我必须将stdin重定向到命名管道。

目前,我的守护进程总是打开命名管道并在execvp之前重定向stdin, 我必须手动CTRL + D,以便继续执行命令。

我想只在请求标准输入的命令时使用此管道。

示例:

cat | wc -l <​​/ strong>:我打开我的命名管道并在execvp之前将stdin重定向到它

ls | wc -l <​​/ strong>:我没有打开命名管道,execvp成功通过

以下是我希望程序运行的方式: enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我看到它正常工作的唯一方法是,如果客户端在发送请求之前以非阻塞模式(然后在打开后将其设置回阻塞模式)打开其“读取”管道(图中的pipe2)到守护程序,然后以正常的阻止模式打开其“写入”(pipe1)管道。同样,守护程序以非阻塞模式打开其“读取”管道(图中的pipe1)(然后在运行命令之前将其设置回阻塞模式),并以阻塞模式打开其“写入”管道(pipe2)。如果同一管道的另一端已经打开,则“写”管道的打开不会阻塞。 –伊恩·雅培(Ian Abbott)