程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 具體解析敕令行的getopt_long()函數

具體解析敕令行的getopt_long()函數

編輯:關於C++

具體解析敕令行的getopt_long()函數。本站提示廣大學習愛好者:(具體解析敕令行的getopt_long()函數)文章只能為提供參考,不一定能成為您想要的結果。以下是具體解析敕令行的getopt_long()函數正文


頭文件
#include<getopt.h>

函數原型
int getopt_long(int argc,char * const argv[],const char *optstring,const struct option *longopts,int *longindex)

函數解釋
getopt被用來解析敕令行選項參數。
getopt_long支撐長選項的敕令行解析,函數中的參數argc和argv平日直接從main()的兩個參數傳遞而來。optstring是選項參數構成的字符串。

字符串optstring可以以下元素:
1. 單個字符,表現選項,

2. 單個字符後接一個冒號:表現該選項後必需跟一個參數。參數緊跟在選項後或許以空格離隔。該參數的指針賦給optarg。

3. 單個字符後跟兩個冒號,表現該選項後可以有參數也能夠沒有參數。假如有參數,參數必需緊跟在選項後不克不及以空格離隔。該參數的指針賦給optarg。(這個特征是GNU的擴大)。
optstring是一個字符串,表現可以接收的參數。例如,"a:b:cd",表現可以接收的參數是a,b,c,d,個中,a和b參數前面跟有更多的參數值。(例如:-a host --b name)。

參數longopts,實際上是一個構造的實例:

struct option {
const char *name; //name表現的是長參數名
int has_arg; //has_arg有3個值,no_argument(或許是0),表現該參數前面不跟參數值
// required_argument(或許是1),表現該參數前面必定要跟個參數值
// optional_argument(或許是2),表現該參數前面可以跟,也能夠不跟參數值
int *flag;
//用來決議,getopt_long()的前往值究竟是甚麼。假如flag是null,則函數會前往與該項option婚配的val值
int val; //和flag結合決議前往值
}

給個例子:

struct option long_options[] = {
{"a123", required_argument, 0, 'a'},
{"c123", no_argument, 0, 'c'},
}

如今,假如敕令行的參數是-a 123,那末挪用getopt_long()將前往字符'a',而且將字符串123由optarg前往(留意留意!字符串123由optarg帶回!optarg不須要界說,在getopt.h中曾經有界說),那末,假如敕令行參數是-c,那末挪用getopt_long()將前往字符'c',而此時,optarg是null。最初,當getopt_long()將敕令行一切參數全體解析完成後,前往-1。

參數longopts,實際上是一個構造的實例:

struct option {
const char *name; //name表現的是長參數名
int has_arg; //has_arg有3個值,no_argument(或許是0),表現該參數前面不跟參數值
// required_argument(或許是1),表現該參數前面必定要跟個參數值
// optional_argument(或許是2),表現該參數前面可以跟,也能夠不跟參數值
int *flag;
//用來決議,getopt_long()的前往值究竟是甚麼。假如flag是null,則函數會前往與該項option婚配的val值
int val; //和flag結合決議前往值
}

給個例子:

struct option long_options[] = {
{"a123", required_argument, 0, 'a'},
{"c123", no_argument, 0, 'c'},
}

如今,假如敕令行的參數是-a 123,那末挪用getopt_long()將前往字符'a',而且將字符串123由optarg前往(留意留意!字符串123由optarg帶回!optarg不須要界說,在getopt.h中曾經有界說),那末,假如敕令行參數是-c,那末挪用getopt_long()將前往字符'c',而此時,optarg是null。最初,當getopt_long()將敕令行一切參數全體解析完成後,前往-1。
典范

#include <stdio.h>
#include <getopt.h>
char *l_opt_arg;
char* const short_options = "nbl:";
struct option long_options[] = {
{ "name", 0, NULL, 'n' },
{ "bf_name", 0, NULL, 'b' },
{ "love", 1, NULL, 'l' },
{ 0, 0, 0, 0},
};
int main(int argc, char *argv[])
{
int c;
while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
{
switch (c)
{
case 'n':
printf("My name is XL./n");
break;
case 'b':
printf("His name is ST./n");
break;
case 'l':
l_opt_arg = optarg;
printf("Our love is %s!/n", l_opt_arg);
break;
}
}
return 0;
}
[root@localhost wyp]# gcc -o getopt getopt.c
[root@localhost wyp]# ./getopt -n -b -l forever
My name is XL.
His name is ST.
Our love is forever!
[root@localhost liuxltest]#
[root@localhost liuxltest]# ./getopt -nb -l forever
My name is XL.
His name is ST.
Our love is forever!
[root@localhost liuxltest]# ./getopt -nbl forever
My name is XL.
His name is ST.
Our love is forever!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved