linux c/c++中getopt的使用
2014-02-21 11:33
363 查看
前言:有时候,我们的程序,需要接收命令行参数
但是一多起来的时候,会很乱。
有没有什么办法?能让我们按照格式来读入呢?
在linux(更不如确切的说是OSX),上面可以使用getopt()这么个库函数,每一次调用都会返回命令行中的下一个参数
这个库,包含在头文件unistd.h中
先来看下面的程序:
简析一下这个程序的主要功能:
getopt(argc, argv,"dt:"))
他完成的意思是表示程序有一个-d和一个-t选项,但是你看-t后面还有一个冒号,表示-t参数后面,要跟着一个参数。
在-t参数被捕获的时候,则可以:
printf("optargvalue is %s\n", optarg);
这么样,用来得到-t后面的那个参数(其实是紧跟-t后面的字符串)
最末尾有两行这样的代码:
他表示跳过已经读取的参数,比如跳过了-d、-t和-t后面的那个字符串
执行的时候:
也可以连着写
但是像这样的情况,就不行了
因为第二个不是-t,就已经进入switch的default了
当然,当需要-d和-t都接收参数的时候,可以把原来的语句,修改成getopt(argc, argv, "d:t:"))
但是一多起来的时候,会很乱。
有没有什么办法?能让我们按照格式来读入呢?
在linux(更不如确切的说是OSX),上面可以使用getopt()这么个库函数,每一次调用都会返回命令行中的下一个参数
这个库,包含在头文件unistd.h中
先来看下面的程序:
#include "stdio.h" #include "stdlib.h" #include "unistd.h" int main(int argc, char *argv[]) { int index; char ch; while((ch = getopt(argc, argv, "dt:")) != EOF) { switch(ch) { case 'd': puts("enter d"); break; case 't': puts("enter t"); printf("optarg value is %s\n", optarg); break; default: return 1; } } argc -= optind; argv += optind; for(index = 0; index < argc; index++) { puts(argv[index]); } return 0; }
简析一下这个程序的主要功能:
getopt(argc, argv,"dt:"))
他完成的意思是表示程序有一个-d和一个-t选项,但是你看-t后面还有一个冒号,表示-t参数后面,要跟着一个参数。
在-t参数被捕获的时候,则可以:
printf("optargvalue is %s\n", optarg);
这么样,用来得到-t后面的那个参数(其实是紧跟-t后面的字符串)
最末尾有两行这样的代码:
argc -= optind; argv += optind;
他表示跳过已经读取的参数,比如跳过了-d、-t和-t后面的那个字符串
执行的时候:
也可以连着写
但是像这样的情况,就不行了
因为第二个不是-t,就已经进入switch的default了
当然,当需要-d和-t都接收参数的时候,可以把原来的语句,修改成getopt(argc, argv, "d:t:"))
相关文章推荐
- Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf
- linux服务器内存吃紧的问题的解决方法
- Linux命令行下设置黑底绿字
- linux socket学习(二)
- Linux-Xampp1.8.2首次使用出现New XAMPP security concept解决办法
- linux学习笔记之树目录和硬盘分区
- Linux虚拟内存系统常用参数说明
- linux socket学习(一)
- 在linux下实现UBOOT的TFTP下载功能
- 安装CentOS 6.4 后无法上网
- Linux进程的状态转换图
- Linux 系统编程学习-文件I/O操作
- Linux系统信息查看命令大全(查看内存使用情况)
- 如何在Linux下格式化U盘以及修改卷标
- linux下各种文件格式的压缩以及解压缩命令
- 设置 Linux 的 LD_LIBRARY_PATH 变量
- 应用 Valgrind 发现 Linux 程序的内存问题
- inittab 详解
- linux 技巧 免除密码
- Linux学习记录--文件内容查阅