日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux getopt()函数 getopt_long()函数---转

發布時間:2025/4/5 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux getopt()函数 getopt_long()函数---转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://hi.baidu.com/scoundrelgg/item/d4083f8412eea05d26ebd97f

Linux getopt()函數 getopt_long()函數

get_opt()函數:

函數原型::

#include <unistd.h>

int getopt(int argc, char * const argv[], const char *optstring);

extern char *optarg;
extern int optind, opterr, optopt;

用法見右邊欄

1.參數說明:

optstring:選項字母組成的字串。如果該字串里的任一字符后面有冒號,那么這個選項就要求有選項參數。

char *optarg:當前選項參數字串(如果有)。

int optind:argv的當前索引值。當getopt()在while循環中使用時,循環結束后,剩下的字串視為操作數,在argv[optind]至argv[argc-1]中可以找到。

int opterr:這個變量非零時,getopt()函數為“無效選項”和“缺少參數選項,并輸出其錯誤信息。


int optopt:當發現無效選項字符之時,getopt()函數或返回'?'字符,或返回':'字符,并且optopt包含了所發現的無效選項字符。

2.更改getopt()函數的出錯信息輸出與否:

a. 在調用getopt()之前,將opterr設置為0,這樣就可以在getopt()函數發現錯誤的時候強制它不輸出任何消息。
b. 在optstring參數的第一個字符前加冒號,那么getopt()函數就會保持沉默,并根據錯誤情況返回不同字符,如下:
“無效選項” —— getopt()返回'?',并且optopt包含了無效選項字符(這是正常的行為)。
“缺少選項參數” —— getopt()返回':',如果optstring的第一個字符不是冒號,那么getopt()返回'?',這會使得這種情況不能與無效選項的情況區分開。

?

/*get_opt function test

huasion 20090920

*/
#include <stdio.h>
#include <unistd.h>

?

int main( int argc, char ** argv)
{?
??
int i,oc;
int res = 0;
char *b_opt_arg;
char ec;

/*commen print argument*/
printf("******************************************************\n");?
printf("usage: get_opt \n ");

printf("argc=%d\n", argc);
for(i=0;i<argc;i++)
?? printf("argv[%d]:%s\n", i, argv[i]);
printf("******************************************************\n");

/*over*/

while((oc=getopt(argc,argv,":ab:cd:")) != -1){

?? switch(oc){
?? case 'a':
??? printf("case a optind = %d.\n",optind);
??? break;
?? case 'b':
??? printf("case b have a value,optarg = %s ,optind = %d.\n",optarg,optind);
??? break;
?? case 'c':
??? printf("case c optind = %d.\n",optind);
??? break;
?? case 'd':
??? printf("case d have a value optarg = %s ,optind = %d.\n",optarg,optind);
??? break;
?? case '?':
??? ec = (char)optopt;
???
??? printf("option \'%c\' invalid! optind = %d, .\n",ec,optarg,optind);
???
?? case ':':
??? printf("getopt() return value : , you need a option value \n");
???
?? default:
??? break;
?? }


}

printf("it is over, res = %d \n",res);

?

}

**********************************分割線**********************************

getopt_long()函數

函數原型:

int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

前三個參數的含義和getopt()函數一致,其余意義如下:

longopts: 長選項表地址 ,定義為:

?? struct option{
??????????? const char *name;
??????????? int has_arg;
??????????? int *flag;
??????????? int val;
???? };

longindex: 如果沒有設置為NULL,那么它就指向一個變量,這個變量會被賦值為尋找到的長選項在longopts中的索引值,這可以用于錯誤診斷。

const char *name: 這是選項名,前面沒有短橫線。譬如"help"、"verbose"之類。
int has_arg:描述了選項是否有選項參數。如果有,是哪種類型的參數,此時,它的值一定是下表中的一個。符號常量 數值 含義?
no_argument 0 選項沒有參數?
required_argument 1 選項需要參數?
optional_argument 2 選項參數可選

int *flag
如 果這個指針為NULL,那么getopt_long()返回該結構val字段中的數值。如果該指針不為NULL,getopt_long()會使得它所指 向的變量中填入val字段中的數值,并且getopt_long()返回0。如果flag不是NULL,但未發現長選項,那么它所指向的變量的數值不變。
int val
這 個值是發現了長選項時的返回值,或者flag不是NULL時載入*flag中的值。典型情況下,若flag不是NULL,那么val是個真/假值,譬如1 或0;另一方面,如果flag是NULL,那么val通常是字符常量,若長選項與短選項一致,那么該字符常量應該與optstring中出現的這個選項的 參數相同。

每個長選項在長選項表中都有一個單獨條目,該條目里需要填入正確的數值。數組中最后的元素的值應該全是0。數組不需要排序,getopt_long()會進行線性搜索。但是,根據長名字來排序會使程序員讀起來更容易。

?

?

/*get_opt function test

huasion 20090920

*/
#include <stdio.h>
#include <unistd.h>
#include <getopt.h>

?


int main( int argc, char ** argv)
{?
??
int i,oc;
int res = 0;
char *b_opt_arg;
char ec;

int do_name, do_gf_name;
char *l_opt_arg;

struct option longopts[] = {
?? { "name", no_argument, &do_name, 1 },
?? { "gf_name", no_argument, &do_gf_name, 1 },
?? { "love", required_argument, NULL, 'l' },
?? { 0, 0, 0, 0},
};


/*commen print argument*/
printf("******************************************************\n");?
printf("usage: get_opt \n ");

printf("argc=%d\n", argc);
for(i=0;i<argc;i++)
?? printf("argv[%d]:%s\n", i, argv[i]);
printf("******************************************************\n");

/*over*/

while((oc = getopt_long(argc, argv, ":l:", longopts, NULL)) != -1){
switch (oc){
case 'l':
?? l_opt_arg = optarg;
?? printf("Our love is %s!\n", l_opt_arg);
break;
case 0:
?? printf("getopt_long()設置變量 : do_name = %d\n", do_name);
?? printf("getopt_long()設置變量 : do_gf_name = %d\n", do_gf_name);
break;
}
}



printf("it is over, res = %d \n",res);

?

}

?

?

#include <stdio.h>
#include <getopt.h>

int do_name, do_gf_name;
char *l_opt_arg;

struct option longopts[] = {
{ "name", no_argument, NULL, 'n' },
{ "gf_name", no_argument, NULL, 'g' },
{ "love", required_argument, NULL, 'l' },
{ 0, 0, 0, 0},
};

int main(int argc, char *argv[])
{
int c;
while((c = getopt_long(argc, argv, ":ngl:", longopts, NULL)) != -1){

//其中,選項以及其有無參數由":ngl:"決定 而不是在option longopts[] 表中的值決定

switch (c){
case 'n':
printf("My name is LYR.\n");
break;
case 'g':
printf("Her name is BX.\n");
break;
case 'l':
l_opt_arg = optarg;
printf("Our love is %s!\n", l_opt_arg);
break;
}
}
return 0;
}

轉載于:https://www.cnblogs.com/davidwang456/p/3544521.html

總結

以上是生活随笔為你收集整理的Linux getopt()函数 getopt_long()函数---转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻 日韩 欧美 综合 制服 | 成人午夜又粗又硬又大 | 国产亚洲精品一区二区三区 | 人妖性做爰aaaa | 色丁香婷婷综合久久 | 91不卡视频| 日本三级日本三级日本三级极 | 久久在线播放 | 色综合色婷婷 | 97人妻精品一区二区三区动漫 | 肉大捧一进一出免费视频 | 国产在线视频福利 | 日本在线不卡一区二区 | 国产亚洲av在线 | 日韩国产欧美精品 | 毛片大全免费 | 五月天精品视频 | 波多在线播放 | 污视频大全 | 肌肉猛男裸体gay网站免费 | 亚洲久久久久久久 | 日韩大片在线免费观看 | 在线观看免费福利 | 日本午夜网站 | 亚洲你我色 | 男女黄床上色视频 | 欧美绿帽合集xxxxx | 日本三级中国三级99人妇网站 | 日本少妇裸体做爰 | 亚洲女同av| 国产九区 | 91香蕉视频在线观看免费 | 国产性av| 久久久久久久久久久国产精品 | 亚洲av无码专区在线播放中文 | 93看片淫黄大片一级 | 美女毛毛片 | 久久综合激情 | 高h视频在线观看 | 国产在线观看免费网站 | 婷婷久久丁香 | 国产农村妇女精品一区二区 | 久久久激情网 | 中文字幕在线2018 | 超在线视频 | 美国毛片基地 | 欧洲午夜视频 | 亚洲欧洲自拍偷拍 | 黄色三级视频在线观看 | 亚洲精选一区二区三区 | 黑人性高潮 | 亚洲熟妇无码av在线播放 | 欧美视频亚洲视频 | 国产一卡二卡三卡 | 日韩黄色网址 | 国产区视频在线 | 精品国产av无码 | 午夜不卡av免费 | 乳色吐息在线看 | 亚洲系列第一页 | 在线观看中文字幕2021 | 国产精品成人国产乱 | 国产在线网 | 色人综合 | 大地资源在线观看免费高清版粤语 | 久久综合激的五月天 | 国产精品福利在线观看 | 毛片一二三区 | 激情综合站 | 天天狠天天透 | 色欧美视频 | 蜜臀aⅴ免费一区二区 | 久久精品视频网站 | 精品色| 亚洲国产传媒 | 国产精品3| 国产精品99久久久久 | 91麻豆精品91久久久久同性 | 神马影院一区二区 | 97超碰在线免费观看 | 亚洲av成人片色在线观看高潮 | 交专区videossex另类 | 国内特级毛片 | 97国产在线播放 | 久久怡春院| 蜜乳av一区二区三区 | 久久人妻一区二区 | 午夜羞羞羞 | 亚洲一区二区三区免费在线观看 | 中文字幕人妻一区二区在线视频 | ass大乳尤物肉体pics | 亚洲中文字幕无码av | 玉蒲团在线 | 国产美女被草 | 成人在线看片 | 又嫩又硬又黄又爽的视频 | 深爱激情av| 欧美激情专区 | 亚洲大片精品 |