如何在 C/C++ 中从 system() 捕获结果 [重复]
Posted
技术标签:
【中文标题】如何在 C/C++ 中从 system() 捕获结果 [重复]【英文标题】:how to capture result from system() in C/C++ [duplicate] 【发布时间】:2010-02-14 04:18:42 【问题描述】:可能重复:How can I run an external program from C and parse its output?
嗨,
有人可以告诉我们在执行 system() 函数时如何捕获结果吗?
实际上我写了一个显示机器IP地址的c++程序,叫做“ipdisp”,我希望当服务器程序执行这个ipdisp程序时,服务器捕获显示的IP地址。那么,这可能吗?如果是,怎么做?
感谢您的回复
【问题讨论】:
被问过很多次。一个例子:***.com/questions/43116/… 对不起,我写这个问题的时候不知道,我没有看到相关的问题。谢谢! 【参考方案1】:是的,你可以这样做,但你不能使用system()
,你必须改用popen()
。比如:
FILE *f = popen("ipdisp", "r");
while (!feof(f))
// ... read lines from f using regular stdio functions
pclose(f);
【讨论】:
非常感谢!请澄清一下。显示的变量是例如(char *xx1;) 那么我们怎样才能得到 xx1?再次感谢! 假设ipdisp
将其输出写入标准输出,您将能够通过上面的文件f
读取其标准输出。使用 fgets
或类似名称。
谢谢!实际上我有两个变量:主机名和 ipaddress,我想捕获 ipaddress。标准输出是最后显示的吗?再次感谢
我按照你说的写了一个小程序,但是当我读到标准输出时,我得到了这个:服务器 IP 地址是:192.168.0.113,它没有显示任何内容。那么是否有可能只得到这个“192.168.0.113”。谢谢!【参考方案2】:
格雷格并不完全正确。您可以使用系统,但这是一个非常糟糕的主意。您可以通过将命令的输出写入临时文件然后读取文件来使用系统...但是 popen() 是一种更好的方法。例如:
#include这种方法存在很多问题...(重定向语法的可移植性、将文件留在文件系统上、其他进程读取临时文件的安全问题等)
【讨论】:
以上是关于如何在 C/C++ 中从 system() 捕获结果 [重复]的主要内容,如果未能解决你的问题,请参考以下文章