上一主题下一主题
关键字
主题 : 如何在自己写的 Linux C 程序中以一种优雅的方式调用一些命令?
级别: 北风技术菜鸟


UID: 471053
精华: 0
发帖: 1898
威望: 5886 点
学点: 2148 点
贡献: 184 点
好评: 0 点
学币: 16 个
注册时间: 2014-07-03
最后登录: 2015-04-04
楼主  发表于: 2015-03-26 00:44||

如何在自己写的 Linux C 程序中以一种优雅的方式调用一些命令?

最近准备使用 C语言 写一个程序,但是需要用到一些已经存在的命令行工具去实现一部分的功能,例如 ifconfig 等,但是,不太想用 fork 之后用 execv 去实现,这样看上去跟 shell脚本 好像没有什么不同。特地在这里请教大家: ==H$zmK  
D%7kBfCb  
如何在自己写的程序中以一种优雅的方式调用一些命令? rxO2js  
例如,能不能利用这些工具的源码去进行封装,不过我不会…… Zw] ?.  
)2Hff.  
在此先谢谢大家了~
此帖悬赏中(剩余时间:已结束)...
最佳答案: 2 学点
热心助人剩余点数: 1 学点
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
沙发(1楼)  发表于: 2015-03-26 00:49||

用system()或popen(),不知道算不算优雅,这个还是留给你自己来评判吧。 -l\~p4U  
79 TPg  
#include <stdlib.h> >g>f;\mD7$  
#include <stdio.h> c!tvG*{  
v&p,Clt-2  
#define SIZE 100 gCg4;b6g  
j|&{e91,?  
int main() "|(rVj=  
{ l.XknF  
    system("ifconfig eth0"); 4kWg>F3  
    FILE *f = popen("ifconfig eth0", "r"); "L9C  
    if (f) { nw~/~eM5=  
        char buf[SIZE]; <P+G7!KZ&  
        while (fread(buf, SIZE, 1, f)) { >r;ABz/  
            printf("%s", buf); ]jHgo](%  
        } qgwv=5|  
        pclose(f); H @_eFlT t  
    } (:_%kmu  
    return 0; {D;Xa`:O  
}
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
板凳(2楼)  发表于: 2015-03-26 00:49||

任何调用命令都是对 fork 之后 exec* 的封装,包括 shell 脚本。 Y <i}"eI*  
于是,你需要的是一个优雅的封装,但是你又不告诉我你用什么写这个程序。 rRG\:<a  
TYS\:ZdXF  
于是,我也不会答。
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
地板(3楼)  发表于: 2015-03-26 00:49||

把已有功能之外的,脚本不能实现的/不方便实现的功能用C写出来,最后用脚本调用所有的模块,优雅。
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
地下室(4楼)  发表于: 2015-03-26 00:49||

libpipeline?  E~jNUTq  
>O|hN`  
既然要调用命令,那就是调用命令。如果对方有库,那才能去调用库(但是会复杂很多的啊)。如果有源码,你可以看看它是怎么实现的,然后把对方的源码****过来,改改用(不过动手前要注意许可证)。