上一主题下一主题
关键字
主题 : 如何在自己写的 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脚本 好像没有什么不同。特地在这里请教大家: a<XCNTaVT  
CF y}r(q  
如何在自己写的程序中以一种优雅的方式调用一些命令? <x%M3BTx  
例如,能不能利用这些工具的源码去进行封装,不过我不会…… ,cTgR78'  
4FeEGySow  
在此先谢谢大家了~
此帖悬赏中(剩余时间:已结束)...
最佳答案: 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(),不知道算不算优雅,这个还是留给你自己来评判吧。 (u$!\fE-et  
P[r}(@0rJ  
#include <stdlib.h> E%KC'T N^D  
#include <stdio.h> F5Cqv0H V  
6i55Ja  
#define SIZE 100 15RI(BN   
< ;.}WQC  
int main() kvY} yw7  
{ }"!6Xm  
    system("ifconfig eth0"); 7 B4w.P,B  
    FILE *f = popen("ifconfig eth0", "r"); aA!@;rR<yU  
    if (f) { * <Nk%`  
        char buf[SIZE]; f4qS OVv  
        while (fread(buf, SIZE, 1, f)) { ZC>`ca  
            printf("%s", buf); i&? 78+:  
        } <[*h_gE5  
        pclose(f); / i\uwa,  
    } E0WrpGZ  
    return 0; LL6ON }  
}
级别: 北风资深评论员


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

任何调用命令都是对 fork 之后 exec* 的封装,包括 shell 脚本。 IW*.B6Hw8  
于是,你需要的是一个优雅的封装,但是你又不告诉我你用什么写这个程序。 ,r4af<  
/% 1lJ D  
于是,我也不会答。
级别: 北风资深评论员


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