QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 713|回复: 4

大家帮个忙-关于程序控制系统命令的问题

[复制链接]
发表于 2003-11-28 15:02:13 | 显示全部楼层 |阅读模式
在linux下,我想通过程序控制系统命令执行,并分析它的返回结果。
    例如:execpl("ls","ls","-a"...)
    那么在console中ls -a 的返回结果,我如何在程序中得到。
    (也许我可以先转向到一个临时文件中,再分析文件,但我觉得这方法不太好。还有好像QT中有个ExecCommand的函数,可以通过receivedStdout消息来得到输出,但是在我的程序中,我不能使用QT怎么办?有没有什么其它的办法,请大家帮我想想?)
发表于 2003-11-28 15:15:17 | 显示全部楼层
可以在你的程序里用管道截获这些命令的输出,把输出返回程序里,但是你的程序一定要有足够大的地方(数组)或者足够好的办法(按一定规则只截取一部分输出)来容纳这些结果。

我写了一个程序,用到这个东西。程序在“ http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=1396 ”,找afc.c里名为“ls_dir……”的函数。

里面有很多“检查口”,所以有点乱。如果不行,告诉我,我给你一个简化版(或者你可以问mozilla)。
回复

使用道具 举报

发表于 2003-11-28 15:18:16 | 显示全部楼层
execpl("ls","ls","-a",">","mytext",...)

??
回复

使用道具 举报

发表于 2003-11-28 15:23:05 | 显示全部楼层
那个函数基本内容如下进行:
[code:1]

        ……//别的八卦内容

        FILE lsdir;//定义一个文件指针,尽管并不真正需要一个临时文件

        char cmd[xx];//这里面是你要执行的命令和各种参数,在我的函数里,这是上级函数传递下来的

        char line[xx];//你的程序里存放输出的临时数组

        ……//别的八卦内容

        lsdir=popen(cmd,"r");//执行命令,并通过管道把输出读到文件指针里(或者说是把文件指针以只读方式指向输出)

        ……//别的八卦内容

        while(fgets(line,sizeof(line),lsdir))//只要指针里的内容没有取完,就继续提取,每提取一行都送到临时数组里

        {

                ……//别的八卦内容

                ……//处理/转存临时数组的内容

                ……//清空临时数组

                ……//别的八卦内容
        }

        ……//别的八卦内容

[/code:1]
回复

使用道具 举报

 楼主| 发表于 2003-11-28 18:38:10 | 显示全部楼层
这么块就能得到回复,感激涕零呀!   

To z :
你的方法与我想的一样,转向输出到别的文件,不过这需要一个实际存在的文件,所以我认为自由狼的方法会更好些!

To 自由狼:
你的方法正是我想要的,但还没有试,现在去试试~~。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-9 10:32 , Processed in 0.048003 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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