getopt

命令行参数解析

一世执手 提交于 2020-01-26 19:35:58
  当我们使用linux系统下很多的命令时,会发现每个命令基本上都有很多的参数选项,这些参数提供给我们很多方便的功能。我们在设计自己的程序时,通常页可以加入类似的功能,我们可以使用标准c库中的getopt函数来实现。 void version() { printf("Version: xx 1.0.\n"); return; } void usage(char *pro) { printf("Usage:%s [Options]\n" "Options:\n" " -h\t: help\n" " -v\t: version\n",pro ); } int main(int argc, char **argv) { char ch; while((ch=getopt(argc, (char* const*)argv, "vh")) != -1) { switch(ch){ case 'v': version(); break; case 'h': case '?': case 'default': usage(argv[0]); } } }   其中,getopt的函数原型是: int getopt(int argc, char *const argv[], const char *optstring);   optstring时参数选项集合,其中的每个字符代表我们提供的参数选项

C getopt.h

醉酒当歌 提交于 2020-01-24 18:51:04
C getopt.h getopt.h getopt函數 getopt_long函數 TensorRT代碼片段 參考連結 getopt.h Gnulib 是GNU開源的庫,廣泛用於各種軟體、套件中。 getopt.h 則是這個開源庫裡的一個頭文件。 來自 11.17 getopt.h ,關於 getopt.h 的介紹: Defines the type struct option and declares the variables optarg, optind, opterr, optopt and the functions getopt, getopt_long, getopt_long_only. getopt.h 定義了 strcut option ,並宣告 optarg , optind , opterr , optopt 等變數及 getopt , getopt_long , getopt_long_only 等函數。 getopt函數 # include <unistd.h> int getopt ( int argc , char * const argv [ ] , const char * optstring ) ; extern char * optarg ; extern int optind , opterr , optopt ; getopt

getopt_long及其使用

放肆的年华 提交于 2020-01-18 12:47:22
Linux系统下,需要大量的命令行选项,如果自己手动解析他们的话实在是有违软件复用的思想,不过还好,GNU C library留给我们一个解析命令行的接口(X/Open规范),好好使用它可以使你的程序改观不少。 使用getopt_long()需要引入头文件 #include <getopt.h> 现在我们使用一个例子来说明它的使用。 一个应用程序需要如下的短选项和长选项。 短选项 长选项 作用 -h --help 输出程序命令行参数说明然后退出 -o filename --output filename 给定输出文件名 -v --version 显示程序当前版本后退后 为了使用getopt_long函数,我们需要先确定两个结构: 1.一个字符串,包括所需要的短选项字符,如果选项后有参数,字符后加一个":"符号。本例中,这个字符串应该为"ho:v"。(因为-o后面有参数filename,所以字符后面要加":") 2.一个包含长选项字符串的结构体数组,每一个结构体包含4个域,第一个域为长选项字符串,第二个域是一个标识,只能为0或1,分别代表没有、有。第三个域永远为NULL。第四个域为对应的短选项字符串。结构体数组的最后一个元素全部为NULL和0,标识结束。在本例中,它应该像一下的样子: const struct option long_options[] = { { "help", 0

linux 中解析命令行参数 (getopt_long用法)

北城余情 提交于 2020-01-18 12:47:04
From http://blog.csdn.net/ast_224/article/details/3861625 getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下: #include <getopt.h> int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex); int getopt_long_only(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex); 说明:函数中的argc和argv通常直接从main()到两个参数传递而来。optsting是选项参数组成的字符串,如 果该字符串里任一字母后有冒号,那么这个选项就要求有参数。下一个参数是指向数组的指针,这个数组是 option结构数组,option结构称为长选项表,其声明如下: struct option { const char *name; int has_arg; int *flag; int val; }; 结构中的元素解释如下: const

[置顶] getopt_long函数基本用法-linux

孤街醉人 提交于 2020-01-18 12:46:40
一、感性认识: [c-sharp] view plain copy #include <stdio.h> #include <getopt.h> char * l_opt_arg; char * const short_options = "nb l: " ; //单冒号表示是否带有参数 [ l 带有参数后面加冒号] struct option long_options[] = { { "name" , 0, NULL, 'n' }, { "bf_name" , 0, NULL, 'b' }, { "love" , 1, NULL, 'l' }, { 0, 0, 0, 0}, }; /* 长选项我们用一个option结构体数组表示长选项的信息: 第一项:表示长选项的名字。 第二项:用来决定 此长选项是否要带参数。 [这里用数值表示] 第三项:我们一般都置为NULL,用来决定getopt_long函数的返回值就是第四个选项的值 第四项:是此长选项相对应的短选项值,因此一旦此函数读到此长选项时,就返回与此长选项相对应的短选项 */ int main( int argc, char *argv[]) { int c; while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1) {

In which status the `Internal error!` invoked?

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-15 09:43:07
问题 I have read some code on bash's getopt ,let me simplify what i have seen hrere. bash sample on getopt containing Internal error! docase(){ TEMP=`getopt -o ab: -- "$@"` eval set -- "$TEMP" while true ; do case "$1" in -a) echo "Option a" ; shift ;; -b) echo "Option b, argument \`$2'" ; shift 2 ;; --) shift ; break ;; *) echo "Internal error!" ;; esac done } I have tried many status to invoke Internal error! with docase g , docase -g , docase --g ,never happened. In which status the Internal

In which status the `Internal error!` invoked?

感情迁移 提交于 2020-01-15 09:42:10
问题 I have read some code on bash's getopt ,let me simplify what i have seen hrere. bash sample on getopt containing Internal error! docase(){ TEMP=`getopt -o ab: -- "$@"` eval set -- "$TEMP" while true ; do case "$1" in -a) echo "Option a" ; shift ;; -b) echo "Option b, argument \`$2'" ; shift 2 ;; --) shift ; break ;; *) echo "Internal error!" ;; esac done } I have tried many status to invoke Internal error! with docase g , docase -g , docase --g ,never happened. In which status the Internal

command line processing library - getopt

偶尔善良 提交于 2020-01-11 03:10:09
问题 Can someone help me with the getopt function? When I do the following in main: char *argv1[] = {"testexec","-?"}; char *argv2[] = {"testexec","-m","arg1"}; int cOption; /* test for -? */ setvbuf(stdout,(char*)NULL,_IONBF,0); printf("\n argv1 "); while (( cOption = getopt (2, argv1, "m:t:n:fs?")) != -1) { switch(cOption){ case 'm': printf("\n -m Arg : %s \n",optarg); break; case '?': printf("\n -? Arg "); break; case 'n': printf("\n -n Arg : %s \n",optarg); break; } } printf("\n argv2 ");

getopt命令

僤鯓⒐⒋嵵緔 提交于 2020-01-08 19:57:11
最近学习了一下getopt(不是getopts)命令来处理执行shell脚本传入的参数,在此记录一下,包括长选项、短选项、以及选项的值出现的空格问题,最后写了个小的脚本来处理输入的参数 首先新建一个test.sh来测试 短选项 test.sh内容 #! /bin/sh echo `getopt a:b::c "$@"` $@ 代表传递的参数,加上双引号很关键 反引号代表将其中的命令先执行一遍 a:代表选项a后必须有值,b::代表选项b后的值可有可无,c代表选项c后无值 运行 sh test.sh -a 1 -b2 -c 3 4 选项b后如果有参数则必须紧跟在b后面,不能加空格 结果 -a 1 -b 2 -c -- 3 4 双横线左侧表示正确识别出的参数,双横线右边表示为无关参数 长选项 test.sh内容 #! /bin/sh echo `getopt -o a:b::c -l along:,blong::,clong -- "$@"` 必须指定短选项 长选项之间使用逗号进行分隔 将指令和参数之间使用 -- 分隔开来,方便getop来区分,否则有些地方getopt会识别错误 运行 sh test.sh -a 1 -b2 -c 3 4 结果 -a '1' -b '2' -c -- '3' '4' 具体什么时候带 -- 看getopt的help说明 Usage: getopt

Handling command line options before and after an argument in C

霸气de小男生 提交于 2020-01-03 17:47:26
问题 So far I've been using getopt_long to parse options for a command line C program. Is there a way to stop getopt_long parsing when it hits a non-option argument? If not, what's the best way to handle this in C? To give an example, I'd like to handle commands in a similar way to git, and have general arguments before a command, and command-specific arguments after it: git [general options] <command> [command options] e.g.: git --bare commit -a git -p --bare status -s -p and --bare are general