微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何存储system调用的输出?

我在c ++程序中使用Linux system(3) 。 现在我需要将system(3)的输出存储为数组或序列。 我如何可以存储system(3)的输出

我正在使用以下内容

system("grep -A1 "<weakObject>" file_name | grep "name" | grep -Po "xoc.[^<]*" | cut -d "." -f5 ");

这给出了输出

changin fdjgjkds dglfvk dxkfjl

我需要将这个输出存储到一个string数组或string序列。

在gdb中如何获得当前debugging进程的pid?

来自不同进程的两个文件描述符指向打开文件表中的相同条目

如何在Unix TeamCity构build代理上设置环境variablesPATH和LD_LIBRARY_PATH?

使用Linux帧缓冲区的graphics,但禁用控制台文本

COM不能启动Out-of-process .Net服务器编译为Anycpu

提前致谢

.lib中的函数被定义,但是当我从相同的.lib生成.so时,该函数不存在

不允许请求的registry访问C#窗口应用程序

如何在运行时添加代码

在程序中使用编解码器

C ++ TerminateProcess函数

system产生了一个新的shell进程,没有通过管道或其他东西连接到父进程。

您需要使用popen库函数。 然后读取输出,并在遇到换行符时将每个字符串推送到数组中。

FILE *fp = popen("grep -A1 "<weakObject>" file_name | grep "name" | grep -Po "xoc.[^<]*" | cut -d "." -f5 ","r"); char buf[1024]; while (fgets(buf,1024,fp)) { /* do something with buf */ } fclose(fp);

你应该使用popen来读取stdin的命令输出。 所以,你会做这样的事情:

FILE *pPipe; pPipe = popen("grep -A1 "" file_name | grep "name" | grep -Po "xoc.[^<]*" | cut -d "." -f5 ","rt")

以读文本模式打开它,然后使用fgets或类似的东西从管道中读取:

fgets(psBuffer,128,pPipe)

The esier way: std::stringstream result_stream; std::streambuf *backup = std::cout.rdbuf( result_stream.rdbuf() ); int res = system("grep -A1 "<weakObject>" file_name | grep "name" | grep -Po "xoc.[^<]*" | cut -d "." -f5 "); std::cout.rdbuf(backup); std::cout << result_stream.str();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐