免费注册 查看新帖 |

Chinaunix

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

popen——C程序中获取Shell命令的输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-02 21:46 |只看该作者 |倒序浏览
以前在C程序中习惯用system来调用执行shell命令,但是这样有个缺点,就是只能得到执行的shell命令的返回值,如果想得到其输出,只能通过一些间接的方法,比如修改shell命令让它的输出重定向到一文件中,然后c程序再从该文件获取。这样的缺点是需要磁盘操作,降低了程序的执行效率。
如果用popen即可解决这个问题。
#include
FILE *popen(const char *cmdstring, const char *type) ;
函数popen 先执行fork,然后调用exec以执行cmdstring,并且返回一个标准I/O文件指针。
如果type是"r",则文件指针连接到cmdstring的标准输出;
如果type是"w",则文件指针连接到cmdstring的标准输入。
下面的例子用wget或curl从网上抓取一个网页,然后把该网页输出到终端:
#include stdlib.h>
int main()
{
    FILE *fp;
    if ((fp = popen("wget www.baidu.com -O -", "r")) == NULL) {//用“curl www.baidu.com”也是一样的
        perror("popen failed");
        return -1;
    }
    char buf[256];
    while (fgets(buf, 255, fp) != NULL) {
           printf("%s", buf);
    }
    if (pclose(fp) == -1) {
        perror("pclose failed");
        return -2;
    }
    return 0;
}
感谢xuxingye和
keensword007



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37472/showart_1889070.html

论坛徽章:
0
2 [报告]
发表于 2014-02-19 13:46 |只看该作者
回复 1# wcw

好文章!!


   

论坛徽章:
1
水瓶座
日期:2014-05-16 13:42:25
3 [报告]
发表于 2014-04-13 14:23 |只看该作者
不错~学习中。。。。

论坛徽章:
0
4 [报告]
发表于 2014-09-12 08:19 来自手机 |只看该作者
good sharing
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP