我试图找出子进程是否在等待用户输入(不解析其输出)。在Unix上的C中,是否有可能确定管道的读端是否当前有一个read()调用阻塞?
问题是,我无法控制子进程中执行的程序。他们打印各种详细的垃圾,我通常想要重定向到/ dev / null。偶尔会有人提示用户。 (提示没有可靠的格式。)所以我的想法是:
答案 0 :(得分:1)
问题是,我无法控制子进程中执行的程序。他们打印各种详细的垃圾,我通常想要重定向到/ dev / null。偶尔会有人提示用户。 (提示没有可靠的格式。)所以我的想法是:
答案 1 :(得分:1)
您有以下选择:
(sleep 10; read a;)&
”答案 2 :(得分:1)
听起来好像你正在试图监督dpkg,偶尔会有一些post-inst脚本向管理员查询是否可能覆盖某些配置文件。
无论如何,你可能想看看strace是如何工作的:
strace -f -etrace=read your.program
当然你需要跟踪你所写的管道的哪些fds,但你可能只需要stdin。
答案 3 :(得分:0)
我不认为这是正确的:例如,在读者端调用read()之前,管道将有一个实际上没有读取的读取器。
答案 4 :(得分:0)
您通常只需写入管道,或使用select或poll。如果您需要握手机制,您可以通过各种方式进行带外协调,或者提出带内协议。
我不知道是否有内置方法可以知道另一端的读卡器是否阻塞。为什么你需要知道这个?
答案 5 :(得分:-1)
如果我没记错的话,你就不能有一个没有阅读器的管道,这意味着你有一个read(2)或select(2)syscal在任何时候都在等待。