我在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] 举报,一经查实,本站将立刻删除。