最佳地从system()命令捕获stdout

最佳地从system()命令捕获stdout 

我正试图通过system()- 例如,启动外部应用程序system("ls")。我希望捕获它的输出,因此我可以将它发送到另一个函数进行进一步处理。在C / C ++中最好的方法是什么?



狐的传说
浏览 912回答 3
3回答

FFIVE

从popen手册:#include&nbsp;<stdio.h>FILE&nbsp;*popen(const&nbsp;char&nbsp;*command,&nbsp;const&nbsp;char&nbsp;*type);int&nbsp;pclose(FILE&nbsp;*stream);

牧羊人nacy

尝试popen()函数。它执行一个命令,如system(),但将输出定向到一个新文件。返回指向流的指针。&nbsp;&nbsp;FILE&nbsp;*lsofFile_p&nbsp;=&nbsp;popen("lsof",&nbsp;"r"); &nbsp;&nbsp;if&nbsp;(!lsofFile_p) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1; &nbsp;&nbsp;} &nbsp;&nbsp;char&nbsp;buffer[1024]; &nbsp;&nbsp;char&nbsp;*line_p&nbsp;=&nbsp;fgets(buffer,&nbsp;sizeof(buffer),&nbsp;lsofFile_p); &nbsp;&nbsp;pclose(lsofFile_p);

阿波罗的战车

误读问题,因为想要将输出传递给另一个程序,而不是另一个函数。popen()几乎可以肯定你想要的。系统使您可以完全访问shell。如果要继续使用它,可以通过系统(“ls> tempfile.txt”)将其输出重定向到临时文件,但选择安全的临时文件很麻烦。或者,您甚至可以通过另一个程序重定向:system(“ls | otherprogram”);有些人可能会推荐使用popen()命令。如果您可以自己处理输出,那么这就是您想要的:FILE&nbsp;*output&nbsp;=&nbsp;popen("ls",&nbsp;"r");它将为您提供一个FILE指针,您可以使用命令的输出读取它。您还可以使用pipe()调用与fork()一起创建连接以创建新进程,使用dup2()来更改它们的标准输入和输出,使用exec()来运行新程序,以及wait()在主程序中等待它们。这只是像shell一样设置管道。有关详细信息和示例,请参见pipe()手册页。
打开App,查看更多内容
随时随地看视频慕课网APP