前言
平時我們在shell命令行上輸入的命令都是應(yīng)用程序,比如ls,ifconfig,vi等。我們下載的busybox源碼中就包含著這些程序源碼,那接下來我們來看看如何實(shí)現(xiàn)一個命令。
如何實(shí)現(xiàn)
我們先分析一下其他的命令,比如gcc:
gcc helloworld.c -o helloworld
上面的編譯指令中,gcc就是命令程序,然后后面的三個都是傳給它的參數(shù)。程序是如何獲取到參數(shù)的呢?我們都知道m(xù)ain函數(shù)的定義如下:
int main(int argc, char * argv[])
argc是參數(shù)個數(shù),argv是參數(shù)值。所以大家應(yīng)該都知道如何獲取參數(shù)了吧。
有了參數(shù),我們就要進(jìn)行解析了。這就有兩種方法:
對參數(shù)進(jìn)行一個一個的判斷解析
使用getopt函數(shù)進(jìn)行解析
第一種方式工作量非常大,所以我們來使用第二種方式。
getopt函數(shù)介紹
#include int getopt(int argc, char * const argv[], const char *optstring);
argc:參數(shù)個數(shù),直接將main函數(shù)中的argc傳給該函數(shù)。
argv:參數(shù)數(shù)組,直接將main函數(shù)中的argv傳給該函數(shù)。
optstring: 選項字符串。
里面還有幾個額外的全局變量:
extern char *optarg; extern int optind, opterr, optopt;
optarg: 保存選項參數(shù)
optind: 記錄下一個檢索位置
opterr: 是否將錯誤信息輸出到stderr, 為0時表示不輸出
optopt: 不在選項字符串optstring中的選項
選項字符串
getopt函數(shù)中有個optstring參數(shù) ,就是選項字符串。用來指定選項,就比如上面gcc命令中的-o,它就是一個選項。
那如何給getopt傳遞選項字符串呢?舉個例子:
a:b:cd::e
這個選項字符串對應(yīng)命令行就是-a ,-b ,-c ,-d, -e選項。
冒號表示參數(shù),一個冒號就表示這個選項后面必須帶有參數(shù)。這個參數(shù)可以和選項連在一起寫,也可以用空格隔開。
兩個冒號的就表示這個選項的參數(shù)是可選的,既可以有參數(shù),也可以沒有參數(shù),但要注意有參數(shù)時,參數(shù)與選項之間不能有空格。
實(shí)例
#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; }
運(yùn)行結(jié)果:
-b選項沒有跟參數(shù)則報錯!
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11329瀏覽量
209967 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
595瀏覽量
27449 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4343瀏覽量
62809 -
命令
+關(guān)注
關(guān)注
5文章
692瀏覽量
22063 -
Shell
+關(guān)注
關(guān)注
1文章
366瀏覽量
23427
原文標(biāo)題:如何給你的Linux系統(tǒng)添加一個新的Linux命令
文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論