Linux庫函式之getopt理解

2021-06-06 19:23:36 字數 931 閱讀 2451

在linux這類作業系統中,有大量的命令列處理程式,例如gcc -o test test.c,那麼像這麼多的命令列引數它是怎麼去分析的呢,就要用到這裡介紹的getopt函式。

getopt函式最早出現在unix作業系統中,因為早期與作業系統互動全是命令終端下,最後這個函式就作為了gnu c的一部分。

函式原型如下:

int getopt(int argc, char * const argv,

const char *optstring);

argc、argv當然是main中的argc和argv了,分別代表命令列引數個數和命令列引數列表。

要使用這個函式,需要包含標頭檔案unistd.h。

我們看getopt.c給的乙個測試例項:

int

main (argc, argv)

int argc;

char **argv;

}if (optind < argc)

exit (0);

}

我們可以將它儲存在test.c中,編譯測試一下,例如:

./test -a

將會列印出option a

getopt每呼叫一次返回乙個選項,它是通過傳遞的optstring引數去判斷的,optstring它這樣一種字串:

單個字元,字元後面接乙個:(乙個冒號)表示選項後面緊跟乙個選項引數,字元後面接::(兩個冒號)表示選項後面跟乙個可選的選項引數,其中使用全域性變數optarg指向這個選項引數。所以上面的例子中a就不帶引數,c帶乙個引數。如果我們給的命令列引數在optstring中沒有找到,那麼getopt函式將返回乙個?。

getopt函式依一次只解析乙個命令列引數,所以通常需要乙個迴圈,依次對命令列引數做解析。

還有一點需要說明的是,全域性變數optind表示下一次呼叫getopt的索引, 初始值為1,  也就是說不會對第乙個命令列引數做解析。

Linux庫函式之fgets

函式原型 char fgets char buf,int bufsize,file stream 通過該函式可以從檔案中按行 一般是1024位元組 讀取資料,也可以從標準輸入 stdin 讀取字串,對於字串的輸入彌補scanf函式不足,相關功能 示例 include include include ...

Linux庫函式之select

關於select的說明介紹請參考博文 擷取部分內容 select在socket程式設計中還是比較重要的,可是對於初學socket的人來說都不太愛用select寫程式,他們只是習慣寫諸如connect accept recv或recvfrom這樣的阻塞程式 所謂阻塞方式block,顧名思義,就是程序或...

Linux下的getopt 函式

linux下的getopt 函式被設計用來處理命令列引數,使用時只要新增 include 即可。函式原型如下 int getopt int argc,char const argv,const char optstring 當給定了命令引數的數量 指向這些引數的陣列和選項字串後,getopt 將返回...