//函式原型
#include int getopt(int argc,char *const ar**[ ],const char *optstring);
引數說明:
**前兩個引數是main()函式的兩個引數,第3個引數是選項字串。
**返回值為int型別,我們知道char型別是可以轉換成int型別的,每個字元都有其對應的整數值,因此這個返回值返回的其實就是乙個字元,就是選項字串裡的選項字元.
當傳入的ar**中的選項全部被解析,getopt()返回-1,這也是getopt進行選項解析的迴圈截至條件;
## 介紹幾個與該函式相關的全域性變數
extern char *optarg; //儲存選項後面的引數
extern int optind; //指示下乙個要讀取的選項引數在ar**中的位置
extern int opterr; //表示是否將錯誤資訊輸出到標準錯誤stderr,為0時表示不輸出,opterr非零時產生的錯誤要輸出到stderr上
extern int optopt; //表示不在選項字串optstring中的選項
## 選項字串
"a:b:cd::e",這就是乙個選項字串,對應到的命令列的選項就是:-a,-b,-c,-d,-e。冒號表示引數,乙個冒號就表示這個選項後面必須帶有引數(沒有引數會報錯)。引數
可以和選項連在一起寫,也可以用空格隔開,例如-a123和-a 123都表示123是-a的引數;兩個冒號(::)表示這個選項的引數是可選的,既可以有引數,也可以沒有引數,但
是注意有引數時,引數和選項之間不能有空格(有空格會報錯),這一點和只有乙個冒號的選項是有區別的。對於上面的"cd:",選項-c後面是沒有引數的,選項-d後面需要有
引數。## 一般用法
while((ret = getopt(argc, ar**, "a:b:cd::e")) != -1)
}《說明》
1. 當傳入的ar**中的選項全部被解析完成,getopt()函式返回-1,這就是getopt進行解析的迴圈截止條件。
2. 如果ar**中解析出optstring中描述的選項字元,則返回該字元,如果該選項指定了引數,則全域性指標變數optarg指向該引數;
3. 如果getopt遇到乙個非optstring指定的選項字元,這表示該選項是未識別的,返回'?',並且將該選項存放到全域性變數optopt中;
4. 如果optstring指定了選項必須帶引數,但傳入的相應option丟失了引數,返回值依賴於optstring的第乙個字元,若第乙個字元是':',返回':',否則返回'?';由於非法
的選項返回也是'?',所以常常optstring的第乙個字元指定為':';同時將該選項存放到全域性變數optopt中。例如: ":a:b:cd::e"
【拓展】getopt_long() - 支援長選項的命令解析
標頭檔案: #include
原 型: int getopt_long(int argc, char *const ar**, const char *optstring, const struct option *longopts, int *longindex);
形參說明:
optstring: 選項字串。單個字元選項的用法和getopt()函式的一樣。
longopts:
struct option;
** 舉例如下:
struct option long_options = ,,};
《說明》 如果命令列的引數是-a 123,那麼呼叫getopt_long()將返回字元'a',並且將字串123由optarg返回(注意注意!字串123由optarg帶回!optarg不需要定義,在
getopt.h中已經有定義),那麼,如果命令列引數是-c,那麼呼叫getopt_long()將返回字元'c',而此時,optarg是null。最後,當getopt_long()將命令列所有引數全部解析
完成後,返回-1。
required_argument(或者是1)時,引數輸入格式為: --引數 值 或者 --引數=值。
optional_argument(或者是2)時,引數輸入格式只能為: --引數=值。
longindex: 表示當前長引數在longopts中的索引值。
extern char* optarg;
extern int optind, opterr, optopt;
optarg:指向當前選項後面的引數字串的指標。
optind:再次呼叫getopt_long時的下乙個ar**指標索引。
optopt:表示最後乙個未知選項。
#include #include int main(int argc, char * ar**)
} return 0;
}
使用系統呼叫getopt簡化對命令列引數的解析
有關系統呼叫getopt 宣告 cpp include int getopt int argc,char const argv,const char optstring extern char optarg extern int optind,opterr,optopt 使用方法 在while迴圈中...
linux 系統呼叫
使用者應用可以通過兩種方式使用系統呼叫。第一種方式是通過c庫函式,包括系統呼叫在c庫中的封裝函式和其他普通函式。圖5.2 使用系統呼叫的兩種方式 第二種方式是使用 syscall巨集。2.6.18版本之前的核心,在include asm i386 unistd.h檔案中定義有7個 syscall巨集...
Linux系統呼叫
一 實驗目的和要求 1.學習linux核心的配置和編譯 2.深入理解linux系統呼叫 3.理解arm和x86的cpu模式 系統模式 使用者模式 的不同 4.掌握核心模組的編寫方法。二 實驗器材 1.linux實驗板卡一塊 2.5v 1a電源乙個 3.microusb線一根 4.macos一台 5....