我正在测试使用管道编程的示例,它看起来非常简单明了。
但是我想知道,如果第一个popen()调用的第一个参数(包含shell命令的字符串)是一个'while do'循环会发生什么。
例如,如果我执行此Shell命令3秒钟,我会得到以下输出:
tomas@ubuntu64:~$ while true; do ps -A; sleep 1; done | grep init
1 ? 00:00:03 init
1 ? 00:00:03 init
1 ? 00:00:03 init
因此,grep在每次迭代中都在工作。
然而,如果我通过C语言示例来进行操作,将示例中的popen()更改为:
FILE* ps_pipe = popen("while true; do ps -A; sleep 1; done", "r");
当我执行已编译的C程序时,没有输出结果。
有人可以解释一下吗?