上一主题下一主题
关键字
主题 : 如何在自己写的 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脚本 好像没有什么不同。特地在这里请教大家: *!@x<Hf<  
k|'Mh0G0  
如何在自己写的程序中以一种优雅的方式调用一些命令? Fg_s'G,`  
例如,能不能利用这些工具的源码去进行封装,不过我不会…… ZH_4'm!^g|  
Z]\^.x9S  
在此先谢谢大家了~
此帖悬赏中(剩余时间:已结束)...
最佳答案: 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(),不知道算不算优雅,这个还是留给你自己来评判吧。 f\fdg].!  
!=3Rg-'d1  
#include <stdlib.h> >&OUGu|  
#include <stdio.h> "< v\M85&  
J1bA2+5.*e  
#define SIZE 100 %%>_B2vc  
syv$XeG=}  
int main() Z%m-HE:k  
{ s2FngAM;f  
    system("ifconfig eth0"); 98fu>>*G{  
    FILE *f = popen("ifconfig eth0", "r"); Y2C9(Zk U  
    if (f) { $$hv `HE^l  
        char buf[SIZE]; ~4\,&HH  
        while (fread(buf, SIZE, 1, f)) { P"1 S$oc  
            printf("%s", buf); v!H:^!z  
        } 9Y/L?km_(  
        pclose(f);  B$^7h!  
    } yPV' pT)  
    return 0; H6gU?9%  
}
级别: 北风资深评论员


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

任何调用命令都是对 fork 之后 exec* 的封装,包括 shell 脚本。 h[PYP5{L  
于是,你需要的是一个优雅的封装,但是你又不告诉我你用什么写这个程序。 jAud {m*T  
4q<=K=F  
于是,我也不会答。
级别: 北风资深评论员


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? i?z3!`m  
xM9EO(u  
既然要调用命令,那就是调用命令。如果对方有库,那才能去调用库(但是会复杂很多的啊)。如果有源码,你可以看看它是怎么实现的,然后把对方的源码****过来,改改用(不过动手前要注意许可证)。