我正在尝试通过system()
启动一个外部应用程序-例如,system("ls")
。我想在它发生时捕获它的输出,这样我就可以将它发送到另一个函数进行进一步处理。在C/C++中做到这一点的最好方法是什么?
发布于 2008-09-24 07:38:00
摘自popen手册:
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
发布于 2008-09-24 07:39:11
尝试popen()函数。它执行一个命令,如system(),但将输出定向到一个新文件中。返回指向该流的指针。
FILE *lsofFile_p = popen("lsof", "r");
if (!lsofFile_p)
{
return -1;
}
char buffer[1024];
char *line_p = fgets(buffer, sizeof(buffer), lsofFile_p);
pclose(lsofFile_p);
发布于 2008-09-24 07:37:00
编辑:将问题误读为希望将输出传递给另一个程序,而不是另一个函数。popen()几乎肯定是您想要的。
系统为您提供对shell的完全访问权限。如果你想继续使用它,你可以通过系统将它的输出重定向到一个临时文件(“ls> tempfile.txt"),但是选择一个安全的临时文件是一件痛苦的事情。或者,您甚至可以通过另一个程序重定向它: system("ls | otherprogram");
有些人可能会推荐popen()命令。如果您可以自己处理输出,这就是您想要的结果:
FILE *output = popen("ls", "r");
这将为您提供一个文件指针,您可以从中读取命令的输出。
您还可以使用管道()调用来创建连接,同时使用fork()来创建新进程,使用dup2()来更改它们的标准输入和输出,使用exec()来运行新程序,并在主程序中使用wait()来等待它们。这只是在设置管道,就像shell一样。有关详细信息和示例,请参阅管道()手册页。
https://stackoverflow.com/questions/125828
复制相似问题