如何从C运行外部程序并解析其输出?

如何从C运行外部程序并解析其输出?

我有一个实用工具,它输出游戏所需的文件列表。如何在C程序中运行该实用程序并获取其输出,以便在同一个程序中对其进行操作?

更新:很好的呼吁缺乏信息。该实用工具释放出一系列字符串,这应该是在Mac/Windows/Linux上完全可移植的。请注意,我正在寻找一种编程方法来执行该实用程序并保留其输出(这将进入stdout)。


ibeautiful
浏览 597回答 3
3回答

忽然笑

对于unix-ish环境中的简单问题,请尝试popen().从手册页:函数通过创建管道、分叉和调用shell来打开进程。如果您使用读取模式,这正是您所要求的。我不知道它是否在Windows中实现。对于更复杂的问题,您需要查找进程间通信。

海绵宝宝撒

正如其他人所指出的,popen()是最标准的方法。由于没有任何答案提供了使用此方法的示例,因此如下所示:#include&nbsp;<stdio.h>#define&nbsp;BUFSIZE&nbsp;128int&nbsp;parse_output(void)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*cmd&nbsp;=&nbsp;"ls&nbsp;-l";&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buf[BUFSIZE]; &nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((fp&nbsp;=&nbsp;popen(cmd,&nbsp;"r"))&nbsp;==&nbsp;NULL)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Error&nbsp;opening&nbsp;pipe!\n"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(fgets(buf,&nbsp;BUFSIZE,&nbsp;fp)&nbsp;!=&nbsp;NULL)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Do&nbsp;whatever&nbsp;you&nbsp;want&nbsp;here... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("OUTPUT:&nbsp;%s",&nbsp;buf); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if(pclose(fp))&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Command&nbsp;not&nbsp;found&nbsp;or&nbsp;exited&nbsp;with&nbsp;error&nbsp;status\n"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}
打开App,查看更多内容
随时随地看视频慕课网APP