免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2837 | 回复: 5
打印 上一主题 下一主题

请教:如何在CPP中获取shell命令输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-08 23:19 |只看该作者 |倒序浏览
向大家请教一个问题,希望各位不吝赐教。

我在shell中获取了一个排序后的文件名数组,举例如下:
A=(`find $path -type f | cut -d/ -f7 | sort -gn`)


怎样才能在不创建临时文件的前提下,在CPP文件中获取这个数组的值呢?

PS:
在shell命令行中运行“A=(`find /home/temp/ -type f | cut -d/ -f7 | sort -gn`)”,然后再运行“echo $A{[@]}”是可以获得结果的,但是在CPP中无论使用putenv、getenv,还是system都没能搞到这个结果,很是郁闷……

论坛徽章:
0
2 [报告]
发表于 2008-12-08 23:21 |只看该作者
试试popen。

论坛徽章:
0
3 [报告]
发表于 2008-12-08 23:26 |只看该作者
OK,已解决,多谢指教。:)

论坛徽章:
0
4 [报告]
发表于 2008-12-09 13:30 |只看该作者
能不能把解决的过程贴一下?
popen是用于管道的。你是怎么使用的?我很想学习一下

论坛徽章:
0
5 [报告]
发表于 2008-12-09 20:17 |只看该作者
呵呵,我还是喜欢定向到文件中再解析

论坛徽章:
0
6 [报告]
发表于 2008-12-10 14:36 |只看该作者
原帖由 emmoblin 于 2008-12-9 13:30 发表
能不能把解决的过程贴一下?
popen是用于管道的。你是怎么使用的?我很想学习一下


  1. int testFunc()
  2. {
  3.     FILE *mystream;
  4.     char *filepath = "/opt/disk2/anypath/";
  5.     char command[1024];
  6.     snprintf(command, sizeof(command), "%s%s%s", "find ", filepath, " -type f | cut -d/ -f7 | sort -gn");
  7.     mystream = popen(command, "r");
  8.     char buf[10240];
  9.     fread( buf, sizeof(char), sizeof(buf), mystream);
  10.     printf("%s", buf);
  11.     pclose(mystream);
  12.     return 1;
  13. }
复制代码


通过popen打开命令管道,把返回值写入内存就行了。

[ 本帖最后由 kwokcn 于 2008-12-10 14:40 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP