首先,对getopt函数进行整理:
1. 头文件: #include <unistd.h>
2. 函数原型及相关声明:
i> 原型: int getopt (int argc, char *argv[], const char * optstring);
ii> 声明: extern char optarg;
extern int optind, opterr, optopt;
3. 说明:
getopt 函数将传递给程序的main函数的argc和argv作为参数,同时接受一个选项指定符字符串optstring,该字符串告诉getopt哪些选项可用,以及它们是否有关联值。optstring是一个字符列表,每个字符代表一个单字符选项。如果一个字符后面紧跟一个冒号(:),则表明该选项有一个关联值作为下一个参数。例如:
getopt(argc, agrv, "if:lr"),它允许几个简单的选项:-i, -l,-r和-f,其中-f选项后要紧跟一个文件名参数。
注: 使用相同的参数,但以不同的顺序来调用命令将改变程序的行为。
getopt的返回值是argv数组中的下一个选项字符,循环调用getopt就可以依此得到每个选项。getopt有如下行为:
i> 如果选项有一个关联值,则外部变量optarg指向这个值;
ii> 如果选项处理完毕,getopt返回-1,特殊参数--将使getopt停止扫描选项;
iii> 如果遇到一个无法识别的选项,getopt返回一个问号(?),并把它保存到外部变量optopt中;
iv> 如果一个选项要求有一个关联值,但是用户并未提供这个值,getopt通常将返回一个问号(?)。如果我们将选项字符串的第一个字符设置为冒号(:),那么getopt将在用户未提供值的情况下返回冒号(:)而不是问号(?)。
注:因此为了区分getopt返回问号时意思为“遇到一个无法识别的选项” 和 “需要用户输入一个关联值”,可以将optstring均已冒号(:)开始。这样则在返回问号时即为未识别的选项,返回冒号时即为需要用户输入关联值。
外部变量optind被舍子为下一个待处理参数的索引。getopt利用它来记录自己的进度。
其次,再对getopt_long函数进行整理。总的来说,getopt_long给人的感觉就像是64位操作系统于32位操作系统,有囊括并带有扩充。
1. 头文件: #include <getopt.h>
2. 函数原型: