Site Overlay

Linux C 笔记:通俗解释 getopt() / getopt_long()(咕咕咕

你可以跳过的前言——我为什么写这一系列教程

互联网上的编程教程,有一个很大的问题,就是一次性给你一堆陌生概念,想让你短时间往脑子里塞入一个复杂系统。其后果就是读者阅读十分费劲,如同入门 P 社游戏。我打算改变这样的传统方式。

本系列教程的原则:

  1. 只给你一个概念,然后引入另一个概念。
  2. 也就是说,同时不超过两个概念。
  3. 通过概念之间连接成网,让你掌握程序的复杂系统。
  4. 不滥用代词、长句子、省略,尽量具体。
  5. 每个概念我用黑体标出,反复巩固。

我相信这样,大家可以更加轻松地学习编程。写教程的过程,也是我自己学习的过程,所以写教程是利己利人的。

我的发布地址:Bilibili 个人网站

阅读本文需要的基础:《命令行程序的参数值和入口函数 —— 猴子也能懂的 C 语言进阶教程》

什么是 getopt()?

从字面上解释,getopt()是“Get Option”的缩写,也即“获取选项”。

这里的选项是什么?

现在,我们打算开发一个程序,能把 doc 文件转换为 html 文件。我们把这个转换程序叫做 doctohtml。我们规定程序的使用方法如下:

$ doctohtml -i a.doc -o b.html -f

这里的 -i 和 -o 和 -f 就可以看作是选项,而后面的 a.doc b.html 就是选项的值, -f 这个选项没有值。这里的选项的具体含义我们设计为:

  1. -i 后面是输入的文件名,我们选择把 a.doc 作为输入的文件。
  2. -o 后面是输出的文件名,我们选择把 b.html 作为输出的文件。
  3. -f 表示如果输出的文件存在,就覆盖。

所以 getopt() 的作用,就是解析 -i 这样的选项及其所带的值。

选项的参数

选项如果后面带了值,比如 -o 后面带了 b.html 所带的值,就是选项的参数。这里的 o 选项的参数就是 b.html

选项字符串

选项字符串是一种人为规定的特殊字符串。要理解它,我们看一个例子。我们有一个字符串 ab:c:de:: ,它就是一个标准的选项字符串,要理解这个例子,我们得把它分割为: a, b:, c:, d, e:: 五个部分。

单个字符,比如这里的 a 表示无参数的选项。前面的 -f 就是无参数的选项。

单个字符带冒号,比如这里的 b:,表示这个选项后面必须带参数。前面的 -o b.html,它的选项字符串就是“o:”,表示 -o 后面必须带 b.html 或其他什么值。

单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。

如果我用的时候不带值呢?

这个时候就会出错,程序进行了错误处理的话,就可能会给你一些提示信息。

有的选项字符串里面有 “?”是什么意思?

因为选项字符不一定非是字母,“?”也行,这时候一般用来输出帮助。“?”不是一个特殊用法,把它和普通字母等同看待就行。

参考文献

https://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html

https://www.geeksforgeeks.org/getopt-function-in-c-to-parse-command-line-arguments/

http://cighao.com/2016/07/14/c-getopt/

https://www.cnblogs.com/liwei0526vip/p/4873111.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注