上一主题下一主题
关键字
主题 : 如何在自己写的 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脚本 好像没有什么不同。特地在这里请教大家: ^N_?&pgy  
gw);b)&mx  
如何在自己写的程序中以一种优雅的方式调用一些命令? YXWlg%s  
例如,能不能利用这些工具的源码去进行封装,不过我不会…… o{wXq)b  
p[M*<==4  
在此先谢谢大家了~
此帖悬赏中(剩余时间:已结束)...
最佳答案: 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(),不知道算不算优雅,这个还是留给你自己来评判吧。 > YHwWf-  
1]wx Ru  
#include <stdlib.h> ? [ n{M  
#include <stdio.h> gxry?' :  
4l0ON>W(  
#define SIZE 100 0^l|W|.Z  
r|U'2+vn  
int main() ][ri A  
{ XH_XGzBQS  
    system("ifconfig eth0"); g3r4>SA  
    FILE *f = popen("ifconfig eth0", "r"); 2b|$z"97jj  
    if (f) { a1lF8;[  
        char buf[SIZE]; 8cqH0{  
        while (fread(buf, SIZE, 1, f)) { RrMC[2=  
            printf("%s", buf); 6\MH2&L<  
        } RP}. Ei  
        pclose(f); F`W8\u'db  
    } 4CR.=  
    return 0; V2< 4~J2: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 脚本。 \z!*)v/{-  
于是,你需要的是一个优雅的封装,但是你又不告诉我你用什么写这个程序。 @=ABO"CQ  
Kl.xe&t@j  
于是,我也不会答。
级别: 北风资深评论员


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? #0Tq=:AE>  
+CI1V>6^  
既然要调用命令,那就是调用命令。如果对方有库,那才能去调用库(但是会复杂很多的啊)。如果有源码,你可以看看它是怎么实现的,然后把对方的源码****过来,改改用(不过动手前要注意许可证)。