getopt函数
2015-11-04 16:00
429 查看
getopt函数用于解析命令行参数,Linux中的很多命令都用到了这个函数,函数原型如下:
其中,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之后,也可以使用空格隔开,如果后面带两个冒号则后面的值是可选的,可带可不带的,例如,我编译运行一下该程序:
另外,另外全局变量optarg用来指向命令选项后面带的那个值,而全局变量optind则是欲处理命令行选项argv中的一个索引值,初始为1。
#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。
相关文章推荐
- Apache POI介绍
- linux命令
- centos 6.5 快速安装PHP环境
- linux下编译make文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录”
- 如何通过PowerShell部署和管理Farm Solution?
- Red Hat Enterprise Linux 5.1 Server(正式版)各版本下载2011-04-17 22:21
- Linux下查看文件和文件夹大小
- linux下使用命令组合的问题
- 关于快速排序的一些优化思考
- 常用linux命令
- Android 的Camera架构介绍
- linux 内核链表
- linux USB 制作
- Centos6.5 下安装PostgreSQL9.4数据库
- linux git 安装
- pixhawk飞控架构
- Bash . configure permission denied错误
- OOA\OOP\OOD
- linux内核部件分析(三)——记录生命周期的kref
- linux内网机器访问外网代理设置squid