c語言中如何開發CLI

2021-08-29 19:43:32 字數 1423 閱讀 8791

在一些底層的系統中,一定都是採用c作為開發語言,而且底層與ui進行互動,一般都會採用cli來實現,cli(command line inte***ce)也就是命令列介面。一定來說都是通過它來提供介面給ui或者一些高階用法。

熟悉perl或者其他一些指令碼的人都知道,cli實現起來是非常簡單,想perl就是採用geopt來實現的。同樣在c語言裡面也是很簡單的。

下面我來詳細介紹下getopt_long的使用者。

首先講下它所涉及的資料結構:

他的結構定義都在getopt.h這個結構體中,下面這個option是乙個非常重要的結構體,它用於儲存命令的引數以及縮寫。

struct option

;

這個結構體是用於儲存命令引數的,第一引數name就是我們引數的名字,第二個引數就是表示這個引數是否有引數值,最後乙個val就是縮寫。

我們來舉個最簡單的例子

struct option longopts = 

*/,,

}

這個例子就定義了兩個引數,第乙個login_user第二個位methodname,而他們的縮寫分別為u,和m 而且他們都是引數值的。

同時我們還需要定義乙個char的字元指標

例如上面的例子我們就需要這樣定義 char *shortopts = "u:m";

這個指標指向了這些引數的縮寫,如果它後面有冒號的話就表明它是帶引數值的引數。反之則反。

上面我簡述了下他的資料結構,下面它的乙個重要函式出場了,它就是getopt_long

extern int getopt_long (int ___argc, char *const *___argv,

const char *__shortopts,

const struct option *__longopts, int *__longind)

他第乙個引數就是引數的個數

也就是我們c語言中int main(int argc,char ** argv) 這裡的argc 第二個引數就是這裡的**argv 乙個指向指標的指標,存放著各種命令引數。

第三個就是我們定義的 shortopts 第四個是我們的longopts

它每執行一次獲取乙個引數,並且會返回引數名的縮寫對於的值,下面我來舉個簡單的例子

while((c=getopt_long(argc,argv,shortopts,longopts,0))

!=eof)

}

這裡我們需要將一下乙個全域性變數 *optarg,它指向我們存放的引數值。

在case中我們需要將我們輸入的引數值獲取過來。

這樣一來我們就可以輕鬆完成我們的cli。

C語言中如何使用巨集

c 和c 中的巨集 macro 屬於編譯器預處理的範疇,屬於編譯期概念 而非執行期概念 下面對常遇到的巨集的使用問題做了簡單總結。巨集使用中的常見的基礎問題 符號和 符號的使用 符號的使用 巨集的解釋方法 我們能碰到的巨集的使用 巨集使用中的陷阱 常見的基礎性問題 關於 和 在c語言的巨集中,的功能...

c語言中如何實現可變引數

c語言函式庫中有不少類似於printf,scanf的函式,這些函式接收的引數個數是不確定的。這些函式實際是通過檔案中的va list,va start,va arg,va end巨集定義是實現的。另外,我們知道程式執行時的記憶體結構後,也可以通過直接訪問這些記憶體空間獲得實際引數值 事實上stdar...

C語言中如何避免野指標

先看乙個例子 struct student stu,pstu intmain void 這是很多人都容易犯的錯誤 定義了結構體變數stu,但結構體內部的char name在定義結構體時只是為其分配了4位元組的記憶體,沒有指向乙個合法的位址,這時其指標指向的區域只是一些亂碼,有事還沒有訪問許可權。這就...