上一主题下一主题
关键字
主题 : 如何在自己写的 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脚本 好像没有什么不同。特地在这里请教大家: R=, pv'  
R)$]r>YZF  
如何在自己写的程序中以一种优雅的方式调用一些命令? ;@gI*i N"  
例如,能不能利用这些工具的源码去进行封装,不过我不会…… m1]/8{EC7  
>c Tt2v  
在此先谢谢大家了~
此帖悬赏中(剩余时间:已结束)...
最佳答案: 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(),不知道算不算优雅,这个还是留给你自己来评判吧。 W_P& ;)E  
sT|FgB  
#include <stdlib.h> gls %<A{C  
#include <stdio.h> *#2]`G)  
;wvhe;!  
#define SIZE 100 fu6Ir,  
ag\xwS#i5H  
int main() !XJS"owr  
{ & e~g}7  
    system("ifconfig eth0"); ct#3*]  
    FILE *f = popen("ifconfig eth0", "r"); 8KrqJN0\  
    if (f) { (lBwkQNQGd  
        char buf[SIZE]; )cd5iE:FO  
        while (fread(buf, SIZE, 1, f)) { nVVQ^i}`G  
            printf("%s", buf); kX)Xo`^Ys  
        } l;C00ZBOc  
        pclose(f); ]NrA2i?  
    }  "0( _  
    return 0; Z_qOQ%l  
}
级别: 北风资深评论员


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

任何调用命令都是对 fork 之后 exec* 的封装,包括 shell 脚本。 vwVK ^B  
于是,你需要的是一个优雅的封装,但是你又不告诉我你用什么写这个程序。 Fai_v{&?  
d|GQZAEJEt  
于是,我也不会答。
级别: 北风资深评论员


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? n*~#]%4  
Ax4;[K\Q  
既然要调用命令,那就是调用命令。如果对方有库,那才能去调用库(但是会复杂很多的啊)。如果有源码,你可以看看它是怎么实现的,然后把对方的源码****过来,改改用(不过动手前要注意许可证)。