我做了一个启动命令的守护进程。
如果execvp函数等待标准输入(例如cat,grep,wc),我必须将stdin重定向到命名管道。
目前,我的守护进程总是打开命名管道并在execvp之前重定向stdin, 我必须手动CTRL + D,以便继续执行命令。
我想只在请求标准输入的命令时使用此管道。
示例:
cat | wc -l </ strong>:我打开我的命名管道并在execvp之前将stdin重定向到它
ls | wc -l </ strong>:我没有打开命名管道,execvp成功通过
答案 0 :(得分:0)
我看到它正常工作的唯一方法是,如果客户端在发送请求之前以非阻塞模式(然后在打开后将其设置回阻塞模式)打开其“读取”管道(图中的pipe2)到守护程序,然后以正常的阻止模式打开其“写入”(pipe1)管道。同样,守护程序以非阻塞模式打开其“读取”管道(图中的pipe1)(然后在运行命令之前将其设置回阻塞模式),并以阻塞模式打开其“写入”管道(pipe2)。如果同一管道的另一端已经打开,则“写”管道的打开不会阻塞。 –伊恩·雅培(Ian Abbott)