您的位置:首页 > 运维架构

getopt函数

2015-11-04 16:00 429 查看
getopt函数用于解析命令行参数,Linux中的很多命令都用到了这个函数,函数原型如下:
#include <unistd.h>

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

其中,argc、argv是main函数中传递进来的,而optstring则是用来解析命令行参数个一个字符串,示例如下:#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int opt, flags, nsecs;

flags = nsecs = 0;
while ((opt = getopt(argc, argv, "nt:")) != -1) {
switch (opt) {
case 'n':
flags = 1;
break;
case 't':
nsecs = atoi(optarg);
break;
default: /* '?' */
fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
argv[0]);
exit(EXIT_FAILURE);
}
}

printf("flags=%d, nsecs=%d\n", flags, nsecs);

exit(EXIT_SUCCESS);
}
在代码中,getopt函数中的字符串"nt:"表示该程序可能带两个命令行参数,其中n后面没有带冒号所以它后面不必带值的,而t后面带两个一个冒号表示它后面必须带一个值的,这个值可以紧跟着t之后,也可以使用空格隔开,如果后面带两个冒号则后面的值是可选的,可带可不带的,例如,我编译运行一下该程序:

./test -n
./test -t 5或./test -t5
./test -n -t 5


另外,另外全局变量optarg用来指向命令选项后面带的那个值,而全局变量optind则是欲处理命令行选项argv中的一个索引值,初始为1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: