linux c开发: 处理命令行参数
来源:互联网 发布:编辑数据透视图编辑区 编辑:程序博客网 时间:2024/06/07 23:40
在Linux c语言开发时,可使用getopt_long获取命令行参数,这个方法同时支持短选项和长选项,比较方便。(因为选项可以带参数,为了不和命令行参数混淆,这里命令行参数称为选项)
边看代码,边做分析:
#include <stdio.h>#include <getopt.h> //需要包括此头文件// Values for long options // 长选项对应的整数值,在long_options结构体数组中,对长选项名对应的整数值进行定义enum { LONGOPT_VAL_TIMEOUT = 257, //注意我们定义的值从257开始,是为了避开短选项 LONGOPT_VAL_MPORT};// 定义短选项,如果有必选参数就要在选项名后加冒号,无参数或可选参数则不要// 短选项的用法是一个-后面跟选项名,如果有参数空格加参数,例如 ./myserver -c cfg.json// 如果是可选参数则要使用两个-,并用等号赋值,例如:./myserver --v=5static const char *short_options = "c:vh";// 长选项的用法是两个-后面选项名,如果有参数需要看是必须参数还是可选参数。// 定义长选项数组,每一项是一个结构体,第一个成员是长选项名,第二个成员是参数使用情况,包括:// required_argument:必须参数,在命令行中需要跟在选项名后面用空格分开,例如 ./myserver --port 8000 或者用等号连接 ./myserver --port=8000// no_argument: 没有参数,那么在选项之后就不能写参数,如果用等号加参数就会报错 option '--help' doesn't allow an argument,如果空格加参数,那参数会被认为是一个选项。// optional_argument: 可选参数,只能使用等号添加。例如 ./myserver --verbose=5// 结构体第四个成员是选项对应的整数值。值得注意的是,这里长选项的整数值可以填入短选项的字符,这样长短选项可以关联起来,达到相同的效果。如果长选项没有对应可用的短选项,则这儿要定义一个数值,这个数值最好大于256,避免和短选项值冲突。下面会看到getopt_long返回值就是这个数值,通过这个数值进行不同的操作。static const struct option long_options[] = { {"port", required_argument, NULL, 'p'}, {"timeout", required_argument, NULL, LONGOPT_VAL_TIMEOUT}, {"config", required_argument, NULL, 'c'}, {"verbose", optional_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, {NULL, 0, NULL, 0}};int main(int argc, char *argv[]){ char *config_file = NULL; char *port = NULL; float timeout = 0.0f; int verbose = 0; int opt = 0; while( (opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1){ switch (opt){ case 'h': case '?': //如果是不能识别的选项,则opt返回'?' fprintf(stdout, "Usage: %s -p <port> [-v|--v <=verbose_level>] [-h]\n", argv[0]); return 0; case 'c': config_file = optarg; break; case 'p': // 'p'是个短选项,但是长选项port的值也是'p',所以这里同时处理了port port = optarg; break; case LONGOPT_VAL_TIMEOUT: //长选项timeout的值 timeout = atof(optarg); break; case 'v': // verbose有可选参数,所以这儿判断是否有参数 if(optarg == NULL){ verbose = 1; } else { verbose = atoi(optarg); } break; } } return 0;}
阅读全文
0 0
- linux c开发: 处理命令行参数
- Linux下C程序命令行参数处理
- Linux命令行参数处理
- linux命令行参数处理
- linux命令行参数处理
- Linux 命令行参数处理
- Linux环境C语言编程的命令行参数处理
- C语言处理命令行参数
- LINUX getopt处理命令行参数
- linux 命令行参数处理篇
- LINUX getopt处理命令行参数
- linux getopts命令行参数处理
- 处理c语言的命令行参数
- Win32开发(命令行参数处理)
- LINUX程序设计 -- 用getopt处理命令行参数
- Linux 程序设计学习笔记----命令行参数处理
- Linux shel编程之命令行参数处理
- Linux C解析控制台输入命令行参数
- uva10673-扩展欧几里得
- codeforces 680D D. Bear and Tower of Cubes(dfs+贪心)
- 虚拟机centos6.4网络连接设置--桥接设置
- River Hopscotch(二分法)
- 二分查找法(折半查找法)的实现
- linux c开发: 处理命令行参数
- 有序数组中和为定值的数字对与和为定值的连续正整数序列
- Jmeter_Beanshell_使用Java处理JSON块
- PCL:从PCD中读取点云
- 小结- 一web
- 设计模式——装饰器模式及在jdk中的应用
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- RxVolley源码学习
- Javacollection