QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 723|回复: 10

怎样运行一个外部程序 并得到它的输出

[复制链接]
发表于 2004-6-13 14:57:37 | 显示全部楼层 |阅读模式
如题

我想得到一个程序在屏幕上的输出如何写阿?
发表于 2004-6-13 18:12:29 | 显示全部楼层
用int system(const char* str);这个函数应该可以实现,把str换成要执行的程序并把结果重定向到一个文件。如:"ls > output"。
回复

使用道具 举报

发表于 2004-6-13 20:14:41 | 显示全部楼层
用从定向,你查dup()或dup2()方法好了
回复

使用道具 举报

 楼主| 发表于 2004-6-13 20:30:54 | 显示全部楼层
system的方法我也想过   output到一个文件  再读取  但是我想这个方法好象复杂了一点

dup是啥?  我去man一下
回复

使用道具 举报

发表于 2004-6-13 21:13:15 | 显示全部楼层
popen
回复

使用道具 举报

发表于 2004-6-14 12:55:34 | 显示全部楼层
直接用管道重定向到你程序的标准输入里。
回复

使用道具 举报

 楼主| 发表于 2004-6-14 13:38:54 | 显示全部楼层
[quote:bbf61d3285="kakuyou"]直接用管道重定向到你程序的标准输入里。[/quote]
对  我就是想知道这个

mozilla兄  你说的popen 只能得到 stdout  没法得到 stderr阿
还有没有别的方法?
回复

使用道具 举报

发表于 2004-6-14 15:55:33 | 显示全部楼层
直接读stderr
回复

使用道具 举报

 楼主| 发表于 2004-6-14 16:30:48 | 显示全部楼层
[quote:2c244d8281="mozilla"]直接读stderr[/quote]
我看过公社以前的帖子
说这样做  所有的程序的stderr都会得到了? 那太夸张了吧
回复

使用道具 举报

发表于 2004-6-14 20:50:25 | 显示全部楼层
[code:1]
        FILE *pfile;
        char line[1024];

        pfile = popen("smbmount -v", "r");
        while(fgets(line, sizeof(line), pfile))
        {
                printf("[%s] \n", line);
        }
[/code:1]
回复

使用道具 举报

发表于 2004-6-16 22:02:00 | 显示全部楼层
用管道比较好

我记得可以用pipe函数吧,然后再dup,然后fork?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 03:00 , Processed in 0.041140 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表