IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习——getopt() -> 正文阅读

[C++知识库]C语言学习——getopt()

C语言学习之getopt使用


在Linux中我们经常见到执行命令时,需要输入参数,例如 rm -rf folder中的 -rf就属于输入的参数,其中 -r是:递归处理, 将指定目录下的所有文件与子目录一并处理; -f是强制删除文件或目录。在看开源代码时也应该会经常见到 getopt()

一、getopt介绍

getopt() 方法是用来分析命令行参数的,该方法由 Unix 标准库提供,包含在 <unistd.h> 头文件中。

getopt()函数结构定义

#include <unistd.h>
 
int getopt(int argc, char * const argv[], const char *optstring);
 
extern char *optarg;
extern int optind, opterr, optopt;

int main(int argc, char* argv[]){
	//getopt()
}

getopt 参数说明:

  1. argc:就是main的形参argc,表示参数的数量
  2. argv:就是main的形参argv,表示参数的字符串变量数组
  3. optstring:选项字符串,一个字母表示一个短参数,如果字母后带有“:”,表示这个参数必须带有参数。如"a:b:c",则程序可以接受参数"-a 10 -b 1000 -c"
    注意:其中短参数在getopt定义里分为三种:
    1)不带值的参数,它的定义即是参数本身。
    2)必须带值的参数,它的定义是在参数本身后面再加一个冒号。
    3)可选值的参数,它的定义是在参数本身后面加两个冒号 。

这里用"2ab:c::"作为样例说明,其中的2,a是不带值的参数,b是必须带值的参数,c是可选值的参数。
在实际调用中,可以写成'-2 -a -b hello -c',或者 '-2 -a -b bhello -cchello', 或者'-2a -bhello -cchello'
这里需要注意:
  1)不带值的参数可以连写,像2a是不带值的参数,它们可以-2 -a分开写,也可以-2a-a2连写。
  2)参数不分先后顺序,'-2a -b hello -cchello''-b hello -cchello -a2'的解析结果是一样的。
  3)要注意可选值的参数的值与参数之间不能有空格,必须写成-cchello这样的格式,如果写成-c chello这样的格式就会解析错误

变量说明:

  1. optarg:如果某个选项有参数,用于获取传入的参数值,包含当前选项的参数字符串
  2. optind:argv 的当前索引值。当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到
  3. opterr:正常运行状态下为 0。非零时表示存在无效选项或者缺少选项参数,并输出其错误信息
  4. optopt:当发现无效选项字符之时,getopt()函数或返回’?‘字符,或返回’:'字符,并且optopt包含了所发现的无效选项字符

二、举例子说明

#include <stdio.h>
#include <unistd.h>
 
int main(int argc, char *argv[]) {
    int para;
    const char *optstring = "abc:d::"; // 有三个选项-abc,其中c选项后有冒号,所以后面必须有参数,d是选参
    while ((para = getopt(argc, argv, optstring)) != -1) {
        switch (para) {
            case 'a':
                printf("parameter opt is a, oprarg is: %s\n", optarg);
                break;
            case 'b':
                printf("parameter opt is b, oprarg is: %s\n", optarg);
                break;
            case 'c':
                printf("parameter opt is c, oprarg is: %s\n", optarg);
                break;
            case 'd':
                printf("parameter opt is d, oprarg is: %s\n", optarg);
                break;
            case '?':
                printf("error optopt: %c\n", optopt);
                printf("error opterr: %d\n", opterr);
                break;
        }
    }
    return 0;
}

编译运行结果:
在这里插入图片描述
分析:

注意这里可选参数 选项 -d 后面跟参数的时候,一定不能有空格。
但是如果是 必选参数,即选项后面只有一个冒号,则是有没有空格都可以。
getopt()每次调用会逐次返回命令行传入的参数。
  当没有参数的最后的一次调用时,getopt()将返回-1。
  当解析到一个不在optstring里面的参数,或者一个必选值参数不带值时,返回’?’。
  当optstring是以’:‘开头时,缺值参数的情况下会返回’:’,而不是’?’ 。

推荐文章

[1]https://blog.csdn.net/afei__/article/details/81261879
[2]: https://blog.51cto.com/vopit/440453
[3]: https://www.cnblogs.com/yinghao-liu/p/7123622.html
2021-09-02。。。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:43:10  更:2021-09-03 11:45:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:40:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码