初识getopt

简介: 笔记

初识getopt


1· getopt 在#include

声明如下:

1.int getopt(int argc, char * const argv[], const char *optstring);

argc,argv是main函数传进的参数

argc —参数个数

argv —参数

optstring —由所有合法的“可选字符”所组成的字符串


optstring详解:
  常规形式: “ab:c::”
  1. 选项后不带 : 表示其后不跟参数
  2. 选项后带一个 : 表示其后必须跟一个参数,且参数紧跟在选项后面,或以空格隔开
  3. 选项后带两个 : 表示其后必须跟一个参数,且参数必须紧跟选项后
  4. 这些选项后的参数的指针会赋给optarg


2· getopt()对错误命令行参数信息的输出

1.这种错误要么是命令行选项无效,要么是缺少选项参数。正常情况下,getopt()会为这两种情况输出自己的出错信息,并且返回’?'。

2.如果不希望输出任何错误信息,或更希望输出自定义的错误信息。可以采用以下两种方法来更改getopt()函数的出错信息输出行为:

1.“无效选项” —— getopt()返回’?',并且optopt包含了无效选项字符。

2.缺少选项参数” —— optstring第一个参数是“:”则返回“:”,否则返回“?”。返回“?”不易和无效选项的情况区分。

optstring第一个字符:

“+” : 遇到非法选项停止

“-” : 每个非选项argv将被处理为一个字符代码1的选项参数

“:” : 判别选项及选项参数,并能屏蔽错误提示

3· getopt设置的四个全局变量

2.extern char *optarg;

optarg ----- 指向当前选项参数(如果有)的指针


3.extern int optind, opterr, optopt;

1.optind------再次调用getopt()时的下一个argv指针的索引号。当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到。


2.opterr------这个变量非零时,向stderr打印错误,默认为1。getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。


3.optopt------最后一个未知选项。当发现无效选项字符之时,getopt()函数或返回’?‘字符,或返回’:'字符,并且optopt包含了所发现的无效选项字符。


4. 常规用法

while((ch = getopt(argc, argv, "ab:c::")) != -1) {
  opterr = 0; // 不让报错误信息
  switch(ch) {
    case 'a' : break;
    case 'b' : break;
    case 'c' : break;
    default  : break;
  }
 }

5. 其他说明

getopt

函数说明 getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的。参数 optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息,并将全域变量optopt设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。

6. Linux法宝

详细说明参考man手册 man 3 getopt


7. 第一篇文章,记录我的开始!!!


相关文章
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
246 4
|
9月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的WAL预写日志文件
PostgreSQL数据库的物理存储结构包含多种文件,其中WAL(预写日志)用于确保数据完整性和高效恢复。WAL机制允许在不频繁刷新数据至磁盘的情况下,通过先写日志再改数据的方式,减少I/O操作,提高性能。每个WAL文件默认大小为16MB,位于pg_wal目录下,支持手动和自动切换。WAL不仅有助于数据恢复,还能显著降低I/O成本。
285 4
|
10月前
|
运维 安全 Ubuntu
自动化运维:使用Ansible进行服务器配置管理
在现代IT基础设施中,自动化运维是确保高效、稳定和安全服务的关键。本文将深入介绍如何使用Ansible这一开源工具来简化服务器配置管理工作,从基础安装到高级应用,我们将一步步展示如何通过Ansible Playbooks实现自动化部署和维护,旨在帮助读者构建更加灵活和可扩展的运维体系。
182 7
|
11月前
|
存储 关系型数据库 MySQL
MySQL 索引结构及其优劣
【10月更文挑战第12天】不同的索引结构各有其适用场景,在实际应用中,需要根据数据特点、查询需求等因素综合考虑选择合适的索引结构。同时,过多或不合理的索引也可能会带来一些负面影响,如增加存储开销、降低数据插入和更新的速度等。因此,在设计索引时需要进行合理的规划和优化。
269 57
|
9月前
|
存储 关系型数据库 MySQL
10个案例告诉你mysql不使用子查询的原因
大家好,我是V哥。上周与朋友讨论数据库子查询问题,深受启发。为此,我整理了10个案例,详细说明如何通过优化子查询提升MySQL性能。主要问题包括性能瓶颈、索引失效、查询优化器复杂度及数据传输开销等。解决方案涵盖使用EXISTS、JOIN、IN操作符、窗口函数、临时表及索引优化等。希望通过这些案例,帮助大家在实际开发中选择更高效的查询方式,提升系统性能。关注V哥,一起探讨技术,欢迎点赞支持!
498 5
|
存储 NoSQL 数据库
Harbor 共享后端高可用-简单版
主机配置包括3台服务器,运行Harbor v2.10.0和Docker 24.0.5,其中10.0.90.68额外运行Postgres+Redis。基础安装配置中详细描述了Docker的安装步骤,包括添加仓库、安装、配置国内镜像源和启动Docker。安装postgres+redis服务使用docker-compose.yml文件,通过`docker-compose up -d`命令启动。最后,安装Harbor涉及修改harbor.yml配置文件,设置主机名、数据库和Redis连接信息,然后运行`install.sh`脚本。
|
存储 SQL 负载均衡
GaussDB技术解读——GaussDB架构介绍
GaussDB技术解读——GaussDB架构介绍
808 3
|
缓存 NoSQL Go
Go语言中的分布式锁实现与选型
【5月更文挑战第6天】本文探讨了Go语言中分布式锁的实现,包括Redis、ZooKeeper和Etcd三种方式,强调了选型时的性能、可靠性和复杂度考量。通过代码示例展示了Redis分布式锁的使用,并提出了避免死锁、公平性等问题的策略。结论指出,开发者应根据业务需求选择合适实现并理解底层原理,以确保系统稳定和高效。
592 0
|
监控 前端开发 关系型数据库
MySQL高可用搭建方案之(MHA)(上)
MySQL高可用搭建方案之(MHA)
微信小游戏制作工具中的分享功能怎么用?
微信小游戏制作工具中的分享功能怎么用?
337 0

热门文章

最新文章