QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 871|回复: 10

编程,怎样把控制台的信息读取到程序里来

[复制链接]
发表于 2004-7-23 16:59:01 | 显示全部楼层 |阅读模式
比如在程序中用system(cmd)执行一个命令,怎样获得命令执行后的输出值。
不是命令执行的返回值,而是命令的输出值,就0和1
比如,netstat hme
显示结果为1或0
我需要在程序中得到这个结果。
发表于 2004-7-23 17:35:47 | 显示全部楼层
可以建立两个管道,fork一个子进程,
父进程的任务:
关闭管道1的写端(也就是fd[1]),从管道1中读取数据(这个数据其实是子进程向标准输出写的,具体我后面介绍)
关闭管道2的读端,向管道2中写数据(这个管道的另一端是子进程的标准输入)
子进程:
先关闭管道1的读端(也就是fd[0]),把管道1复制为标准输出(dup2(fd[1],1);)
关闭管道2的写端,把管道2的读端复制为标准输入
execl一个程序
当然,如果你需要标准错误输出的内容,可以再建立一个管道
回复

使用道具 举报

 楼主| 发表于 2004-7-23 17:44:24 | 显示全部楼层
感谢,但是我还不怎么明白,
能继续吗?
有点代码范例来看看就更好了。
回复

使用道具 举报

发表于 2004-7-23 17:48:27 | 显示全部楼层
你等一下啊,我这就去写~~
回复

使用道具 举报

 楼主| 发表于 2004-7-23 17:52:49 | 显示全部楼层
在线期待
回复

使用道具 举报

发表于 2004-7-23 18:09:59 | 显示全部楼层
搞定!!
你看啊:
我先让你看看我现在的目录:
[code:1]
[monnand@Monnand test]$ ls
1.c   2.c
[monnand@Monnand test]$
[/code:1]
好了!让你看看1.c(注意,这个是主要的),里面注释我用了英文……我英文不好,你看不懂尽管说啊
[code:1]
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
        pid_t pid;
        int fdin[2];    /*      stdin of child process  */
        int fdout[2];   /*      stdout of child process */
        char buf[1024];

        memset(buf,0,1024);

        if(pipe(fdin)<0||pipe(fdout)<0)
                perror("can not pipe\n");

        pid=fork();
        if(pid<0)
                perror("Can not fork\n");

        if(0==pid)
        /*      child process   */
        {
                close(fdin[1]);         
   /*      pipe for reading of child process       */
                close(fdout[0]);      
   /*      pipe for writing of child process       */
                dup2(fdin[0],0);
                dup2(fdout[1],1);
                execl("./test",NULL);
                exit(0);
        }

        if(pid>0)
        {
                close(fdin[0]);
                close(fdout[1]);

                read(fdout[0],buf,1024);
                write(1,buf,1024);
        }
        waitpid(pid,NULL,0);
        return 0;
}
[/code:1]
明白了?
你再看看2.c(很简单啦)
[code:1]
#include <stdio.h>
int main()
{
        printf(";lsdajf;f\n");
        return 0;
}
[/code:1]
好了!下面我就不说什么了,你看看我的命令就知道了:
[code:1]
[monnand@Monnand test]$ gcc 1.c
[monnand@Monnand test]$ gcc 2.c -o test
[monnand@Monnand test]$ ./a.out
;lsdajf;f
[monnand@Monnand test]$
[/code:1]
明白了???
回复

使用道具 举报

 楼主| 发表于 2004-7-23 18:17:10 | 显示全部楼层
等我慢慢研究一下,我现在还比较菜
回复

使用道具 举报

发表于 2004-7-23 18:22:50 | 显示全部楼层
好的好的~不明白的话再问啦~我表达能力有限的~
回复

使用道具 举报

 楼主| 发表于 2004-7-23 18:29:17 | 显示全部楼层
"[monnand@Monnand test]$ ./a.out "
这句是什么》?
回复

使用道具 举报

发表于 2004-7-23 18:32:47 | 显示全部楼层
gcc默认输出的可执行文件就是a.out啊~就是执行1.c的代码指示的内容
回复

使用道具 举报

 楼主| 发表于 2004-7-23 18:37:04 | 显示全部楼层
哦,原来是默认,我居然这个都不知道
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-7 20:53 , Processed in 0.085219 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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