getopt函数(未更新完)

news/2024/3/29 23:39:52/文章来源:https://blog.csdn.net/m0_61629312/article/details/131972212

2023年7月28日,周五上午

这是我目前碰到过的比较复杂的函数之一,

为了彻底弄懂这个函数,我花了几个小时。

为了更好的说明这个函数,之后我可能会录制讲解视频并上传到B站,

如果我上传到B站,我会在文章添加视频链接的。

内容太多了,没写完,有空再更新......


函数原型

#include<unistd.h>int getopt(int argc,char * const argv[ ],const char * optstring);
  • 参数 argc:表示命令行参数的数量
  • 参数 argv:表示命令行参数的数组
  • 参数 optstring:表示可接受的选项字符串

4个辅助外部变量

与常见的库函数不同,getopt函数还带有4个外部变量作为辅助:

extern char *optarg;
extern int optind, opterr, optopt;
  • 外部变量 optarg:用于存储选项的参数值
  • 外部变量 optind:当前解析的选项在命令行参数数组中的索引
  • 外部变量 opterr:控制错误消息的输出
  • 外部变量 optopt:用于存储未识别的选项字符

返回值

以下关于getopt返回值的英文解释引自getopt

The getopt() function shall return the next option character specified on the command line.

A colon ( ':' ) shall be returned if getopt() detects a missing argument and the first character of optstring was a colon ( ':' ).

A question mark ( '?' ) shall be returned if getopt() encounters an option character not in optstring or detects a missing argument and the first character of optstring was not a colon ( ':' ).

Otherwise, getopt() shall return -1 when all command line options are parsed.

以下是我的翻译:

正确情况下,getopt函数应该返回命令行中的下一个选项字符的ASCII码。

如果optstring的第一个字符是冒号":",那么当要填写参数的选项没有填写参数时,返回冒号":"的ASCII码。

当opstring的第一个字符不是冒号":"时,如果getopt函数遇到了一个不在optstring中的选项或要填写参数的选项没有填写参数,那么就会返回问号"?"的ASCII码。

否则,getopt函数会在命令行的参数都已经被访问的时候返回-1.

 现在看不懂不要紧,先继续往下看,理解了下面的知识才能更好的理解返回值。


optstring怎么写

概述与示例

getopt(int argc,char *argv[],"ab:c");//示例Agetopt(int argc,char *argv[],"ab::c");//示例Bgetopt(int argc,char *argv[],":abc");//示例C

示例A中的”ab:c“,意为有三个选项:a、b和c,其中选项b必须要填写参数

示例B中的"abc::",意为有三个选项:a、b和c,其中选项b可以填写参数,也可不填写参数

示例C中的”:abc“,意为有三个选项:a、b和c,开头是":"意味着改变返回值和输出错误的方式

第一个字符是不是冒号":"

在getopt中存在着两种错误:

  • 必须添加参数的选项没有填写参数
  • 写上了不存在于opstring中的选项

如果optstring的第一个字符是冒号":",那么意味着:

  • 当必须添加参数的选项没有填写参数的时,只会返回冒号":"的ASCII码;
  • 当写上了不存在于opstring中的选项时,只会返回问号"?"的ASCII码。

如果optstring的第一个字符不是冒号":",那么意味着:

  • 当必须添加参数的选项没有填写参数的时,不仅会返回问号"?"的ASCII码,而且会在控制台输出一段提示缺少参数的报错信息;
  • 当写上了不存在于opstring中的选项时,不仅会返回问号"?"的ASCII码,而且会在控制台输出一段提示无效选项的报错信息。

总而言之,

第一个字符是冒号":",不会在控制台输出相应的报错信息,且两种错误的返回值不同:一个是问号"?"的ASCII码,一个是冒号":"的ASCII码;

第一个字符不是冒号":",会在控制台输出相应的报错信息,且两种错误的返回值相同:都是问号"?"的ASCII码。


参考文章

Linux下getopt()函数的简单使用 - 青儿哥哥 - 博客园 (cnblogs.com)

(1条消息) 原来命令行参数处理可以这么写-getopt?_huangxiaohu_coder的博客-CSDN博客 

getopt 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_337426.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 进阶(二):操作字符串的常用方法

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、索引和切片二、字符串长度三、查找和替换四、大小写转换五、分割和连接六、去除空…

《JavaSE-第二十章》之线程 的创建与Thread类

文章目录 什么是进程&#xff1f;什么是线程&#xff1f;为什么需要线程&#xff1f; 基本的线程机制创建线程1.实现 Runnable 接口2.继承 Thread 类3.其他变形 Thread常见构造方法1. Thread()2. Thread(Runnable target)3. Thread(String name)4. Thread(Runnable target, Str…

C语言每天一练----输出水仙花数

题目&#xff1a;请输出所有的"水仙花数" 题解&#xff1a;所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。 例如, 153是水仙花数, 因为153 1 * 1 * 1 5 * 5 * 5 3 * 3 * 3" #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h&g…

Segmentation fault 利用 core.xxx文件帮助你debug

在没有get到本文介绍的技能之前的时候&#xff0c;以前遇到程序发生了 Segmentation fault 时&#xff0c;也是一筹莫展&#xff0c;看到伴随程序崩溃而生成的 core.xxxx 文件时&#xff08;有时会生成&#xff0c;有时不会生成&#xff0c;留着下面介绍&#xff09;&#xff0…

windows系统之WSL 安装 Ubuntu

WSL windows10 以上才有这个wsl功能 WSL&#xff1a; windows Subsystem for Linux 是应用于Windows系统之上的Linux子系统 作用很简单&#xff0c;可以在Windows系统中获取Linux系统环境&#xff0c;并完全直连计算机硬件&#xff0c;无需要通过虚拟机虚拟硬件 Windows10的W…

TCP网络通信编程之字符流

【案例1】 【题目描述】 【 注意事项】 (3条消息) 节点流和处理流 字符处理流BufferedReader、BufferedWriter&#xff0c;字节处理流-BufferedInputStream和BufferedOutputStream (代码均正确且可运行_Studying~的博客-CSDN博客 1。这里需要使用字符处理流&#xff0c;来将…

C++代码格式化工具clang-format详细介绍

文章目录 clang-format思考代码风格指南生成您的配置运行 clang-format禁用一段代码的格式设置clang-format的设置预览 clang-format 我曾在许多编程团队工作过&#xff0c;这些团队名义上都有“编程风格指南”。该指南经常被写下来并放置在开发人员很少查看的地方。几乎在每种…

MQTT服务器详细介绍:连接物联网的通信枢纽

随着物联网技术的不断发展&#xff0c;MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议作为一种轻量级、可靠、灵活的通信协议&#xff0c;被广泛应用于物联网领域。在MQTT系统中&#xff0c;MQTT服务器扮演着重要的角色&#xff0c;作为连接物联网设备和…

常见网关对比

常见网关对比 目前常见的开源网关大致上按照语言分类有如下几类&#xff1a; Nginxlua &#xff1a;OpenResty、Kong、Orange、Abtesting gateway 等 Java &#xff1a;Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等 Go &#xff1a;Janus、fa…

计算机里基本硬件的组成以及硬件协同

文章目录 冯诺依曼体系输入设备输出设备存储器运算器控制器协同工作的流程 冯诺依曼体系 世界上第一台通用计算机&#xff0c;ENIAC&#xff0c;于1946年诞生于美国一所大学。 ENIAC研发的前期&#xff0c;需要工作人员根据提前设计好的指令手动接线&#xff0c;以这种方式输入…

【HDFS】Block、BlockInfo、BlockInfoContiguous、BlockInfoStriped的分析记录

本文主要介绍如下内容: 关于几个Block类之间的继承、实现关系;针对文章标题中的每个类,细化到每个成员去注释分析列出、并详细分析BlockInfo抽象类提供的抽象方法、非抽象方法的功能针对几个跟块组织结构的方法再进行分析。moveBlockToHead、listInsert、listRemove等。一、…

spring5源码篇(13)——spring mvc无xml整合tomcat与父子容器的启动

spring-framework 版本&#xff1a;v5.3.19 文章目录 整合步骤实现原理ServletContainerInitializer与WebApplicationInitializer父容器的启动子容器的启动 相关面试题 整合步骤 试想这么一个场景。只用 spring mvc&#xff08;确切来说是spring-framework&#xff09;&#x…

MySQL 实现分库和分表的备份 2023.7.29

1、分库备份 [rootlocalhost mysql-backup]# cat db_bak.sh #!/bin/bash k_userroot bak_password123456 bak_path/root/mysql-backup/ bak_cmd"-u$bak_user -p$bak_password" exc_db"Database|information_schema|mysql|performance_schema|sys" dbname…

C#,数值计算——对数正态分布(logarithmic normal distribution)的计算方法与源程序

对数正态分布&#xff08;logarithmic normal distribution&#xff09;是指一个随机变量的对数服从正态分布&#xff0c;则该随机变量服从对数正态分布。对数正态分布从短期来看&#xff0c;与正态分布非常接近。但长期来看&#xff0c;对数正态分布向上分布的数值更多一些。 …

基于minio的dababend部署总结

Databend 是一款开源、弹性、低成本&#xff0c;基于对象存储也可以做实时分析的新式数仓。期待您的关注&#xff0c;一起探索云原生数仓解决方案&#xff0c;打造新一代开源 Data Cloud。 Minio搭建 minio 192.168.10.159 cd /data mkdir minio cd minio wget https://dl…

word2vec原理总结

参考文章&#xff1a;https://www.cnblogs.com/pinard/p/7160330.html word2vec是google在2013年推出的一个NLP工具&#xff0c;它的特点是将所有的词向量化&#xff0c;这样词与词之间就可以定量的去度量他们之间的关系&#xff0c;挖掘词之间的联系。 1 词向量编码 1.1 one…

Unity源码分享-黄金矿工游戏完整版

Unity源码分享-黄金矿工游戏完整版 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88118933

Python-Python基础综合案例--数据可视化 - 地图可视化

版本说明 当前版本号[20230729]。 版本修改说明20230729初版 目录 文章目录 版本说明目录知识总览图Python基础综合案例--数据可视化 - 地图可视化基础地图使用案例效果视觉映射器 疫情地图-国内疫情地图案例效果实操设置全局配置选项 疫情地图-省级疫情地图案例效果实操 知…

如何做好IT类的技术面试

目录 一、IT行业的招聘渠道 二、如何做好技术面试官 三、谈谈IT行业如何做好招聘工作 四、面试IT公司的小技巧 五、面试有哪些常见的问题 六、关于面试的一些建议 面试可能是我们每个人都必须会遇到的事情&#xff0c;而技术面试更具有专业性&#xff0c;以下会从几个方面…

IDEA将本地项目上传到码云

一、创建本地仓库并关联 用IDEA打开项目&#xff0c;在菜单栏点击vcs->create git repository创建本地仓库&#xff0c; 选择当前项目所在的文件夹当作仓库目录。 二、将项目提交本地仓库 项目名右键就会出现“GIT”这个选项->Add->Commit Directory, 先将项目add…