如何给你的Linux系统添加一个新的Linux命令

前言
平时我们在shell命令行上输入的命令都是应用程序,比如ls,ifconfig,vi等。我们下载的busybox源码中就包含着这些程序源码,那接下来我们来看看如何实现一个命令。
如何实现
我们先分析一下其他的命令,比如gcc:
gcc helloworld.c -o helloworld  
上面的编译指令中,gcc就是命令程序,然后后面的三个都是传给它的参数。程序是如何获取到参数的呢?我们都知道main函数的定义如下:
int main(int argc, char * argv[])  
argc是参数个数,argv是参数值。所以大家应该都知道如何获取参数了吧。
有了参数,我们就要进行解析了。这就有两种方法:
对参数进行一个一个的判断解析
使用getopt函数进行解析
第一种方式工作量非常大,所以我们来使用第二种方式。
getopt函数介绍
#include int getopt(int argc, char * const argv[], const char *optstring);  
argc:参数个数,直接将main函数中的argc传给该函数。
argv:参数数组,直接将main函数中的argv传给该函数。
optstring: 选项字符串。
里面还有几个额外的全局变量:
extern char *optarg;extern int optind, opterr, optopt;  
optarg: 保存选项参数
optind: 记录下一个检索位置
opterr: 是否将错误信息输出到stderr, 为0时表示不输出
optopt: 不在选项字符串optstring中的选项
选项字符串
getopt函数中有个optstring参数 ,就是选项字符串。用来指定选项,就比如上面gcc命令中的-o,它就是一个选项。
那如何给getopt传递选项字符串呢?举个例子:
a:b:cd::e  
这个选项字符串对应命令行就是-a ,-b ,-c ,-d, -e选项。
冒号表示参数,一个冒号就表示这个选项后面必须带有参数。这个参数可以和选项连在一起写,也可以用空格隔开。
两个冒号的就表示这个选项的参数是可选的,既可以有参数,也可以没有参数,但要注意有参数时,参数与选项之间不能有空格。
实例
#include #include int main(int argc, char * argv[]){  int ch; printf(optind:%d,opterr:%d, optind, opterr); printf(--------------------------); while ((ch = getopt(argc, argv, abde::)) != -1) { printf(optind: %d, optind); switch (ch) { case 'a': printf(option: -a); break; case 'b': printf(option: -b); printf(the argument of -b is %s, optarg); break; case 'c': printf(option: -c); printf(the argument of -c is %s, optarg); break; case 'd': printf(option: -d); break; case 'e': printf(option: -e); printf(the argument of -e is %s, optarg); break; case '?': printf(unknown option: %c,(char)optopt); break; } } return 0;}  
运行结果:
-b选项没有跟参数则报错!


补贴退坡六成以上 中国新能源汽车产业尚能一战
采用A723构成的从0起稳压电路
单片机SPI通信协议的应用
嵌入供应链 --- 创新经济环境中的电子元器件市场导向
北京市计量检测研究院成功研发出具有国内领先水平的PM2.5的标准物质和扬尘校准装置
如何给你的Linux系统添加一个新的Linux命令
如何拓宽LED显示产品应用场景,进一步激发市场新潜能?
JCVM中栈与帧的研究和设计
电子管如何实现放大
可见光通信技术对于智能家居有什么好处
stm32f103开发板原理图分析
小米6又延期!红米Pro2抢先发布6GB运存+八核处理器,不知小米平板3会不会同步发售
iphone8水滴形外形,推出中国红版iPhone7
自动引导车(AGV)初创公司的全球地理分布
服装店推出新型体感试衣镜,为购物体验加加分
液晶显示器基础知识
谷歌“不务正业”知名跑题之作:无人驾驶汽车
推挽电路工作原理详解(四类互补推挽式功率放大电路分析)
具有限流功能的PNP扩展电压、电流的正极性输出电路
科创板中国通号独立非执行董事陈津恩介绍、履历信息