我的任务是在C中创建一个打开管道的程序,然后其中一个进程'执行ls命令并将输出写入管道。然后另一个进程应该读取它并将其显示在shell中。
所以,我正在努力解决的主要问题是:
execl("/bin/ls", "/bin/ls", NULL);
如何将输出重定向到管道?
我尝试的另一种方法是将输出重定向到文件,读取文件然后将其写入管道,然后最后在另一端读取它(并删除文件)。 在一个想要这样的shell中:
ls > ls_out.txt
但我无法使用execl
重现该内容。
当然,我最喜欢的解决方案仍然是:
execl("/bin/ls", "bin/ls", " > my_pipe", NULL)
答案 0 :(得分:2)
使用popen()而不是execl()来读取应用程序输出,请参阅http://linux.die.net/man/3/popen
答案 1 :(得分:1)
在您的计划中创建pipe。
做叉子。
在子进程中,使管道的写入结束为新STDOUT_FILENO
。 (阅读dup2
系统调用)
执行您要运行的程序。
在父进程中从管道的读取端读取。
这就是例如popen
在幕后工作。
答案 2 :(得分:0)
答案 3 :(得分:0)
我想这可能就是你要找的东西?
for ls -1
; echo $ i;完成了
或
ls -1 | xargs echo