C 语言 命令行选项
命令行选项用到 getopt() 函数,需要 unistd.h 头文件,getopt() 函数的原型为:
getopt(int argc,char </em>const argv[],const char <em>optstring)
这个函数要配合 main 函数使用,argc 和 argv 一般就将 main 函数的那两个参数原样传入。
如下例子:
# include <unistd.h> int main(int argc, char </em>argv[]) {<br> int ch; // 用于接收命令行选项的字符 opterr=0; // 全局变量 opterr=0 用于隐藏错误 while ((ch = getopt(argc, argv, "a:b::cde")) != EOF) { // 或 != -1 printf("optind:%d\n", optind); printf("optarg:%s\n", optarg); printf("ch:%c\n\n", ch); switch (ch) { case 'a': printf("option a:'%s'\n\n", optarg); break; case 'b': printf("option b:'%s'\n\n", optarg); break; case 'c': printf("option c\n\n"); break; case 'd': printf("option d\n\n"); break; case 'e': printf("option e\n\n"); break; default: printf("other option\n\n"); break; } } printf("optopt + %c\n", optopt); // optind 保存了 getopt() 函数从命令行读取了几个选项 // 跳过已读取的选项 argc -= optind; argv += optind; // 偏移量(指针运算符,数组首地址) return 0; }
gcc 编译后运行:
./main -a1234 -b567 -c -d -f
输出:
optind:2 optarg:1234 ch:a option a:'1234' optind:3 optarg:567 ch:b option b:'567' optind:4 optarg:(null) ch:c option c optind:5 optarg:(null) ch:d option d optind:6 optarg:(null) ch:? other option optopt + f
main 函数总共接收了 6 个参数:
argc=6; argv[0]=./main // 程序自身 argv[1]=-a1234<br> argv[2]=-b567 argv[3]=-c argv[4]=-d argv[5]=-f
optstring
是一段自己规定的选项串,例如本例中的ab:cde
,表示可以有,-a
,-b
,-c
,-d
,-e
这几个参数。:
:表示必须该选项带有额外的参数,全域变量optarg
会指向此额外参数;::
:标识该额外的参数可选(有些 Uinx 可能不支持::
)。optind
:全域变量指示下一个要读取的参数在argv
中的位置,在 argv 中第几个.opterr
:如果getopt()
找不到符合的参数则会印出错信息,并将全域变量 optopt 设为?
字符。如果不希望 getopt() 印出错信息,则只要将全域变量 opterr 设为 0 即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: C 语言中的 重定向
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论