#include <unistd.h>

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


getopt调用分解命令行参数,它的参数argc和argv时mian函数的两个参数。argv中以'-'开头的元素除了('-')和('—')是一个选项。这个元素的字符(在'-'字符后面)是选项字符。如果getopt被重复的调用,它返回每个选项字符。


变量optind是在argv中下一个被处理的元素的索引,0开始。系统初始化它为1。调用者可以重置它为1


如果getopt找到另一个选项字符,它返回那个字符。刷新外部变量optind和静态变量nextchar。之后下次getopt调用就可以扫描剩余的选项字符或argv的元素


如果没有再多的选项字符,getopt返回-1.optind是第一个argv元素中非选项字符在argv中的索引,0开始。/*argv中数组的顺序被getopt调整了,把所有分选项字符放到后面,选项字符放到前面*/


optstring是包含目标选项字符的字符串。如果一个字符后面跟随一个冒号,那这个选项需要一个参数,getopt将指向该参数的指针放在optarg。两个冒号表示这个选项有一个可选参数,如果有参数在当前argv元素,(例如紧跟在选项后面,如”-oarg”),它将返回在optarg。在其它情况下optarg置0。如果optstring包含W后面跟随着分号,那-W foo将和长选项—foo一样。-W选项是POSIX.2保留的。


默认的,getopt会调换argv元素的序列,非选项字符放在后面。如果optstring的第一个字符时+或者环境变量POSIXLY_CORRECT被设置,则在遇到第一个非选项字符时选项处理停止。如果optstring的第一个字符是-,则每一个非选项的argv元素将当作选项字符1的参数。特殊参数”--”强制选项扫描结束。


如果getopt不能识别一个选项字符,它向stderr打印错误信息,将该字符存入optopt,并返回?。调用程序可以设置opterr为0阻止打印错误信息。


如果getopt获得一个选项字符不包含在optstring中,或者它没有给出参数,getopt将返回?和设置外部变量optopt为实际选项字符。如果optstring的第一个字符是冒号,则getopt将返回冒号替代?来指示遗失参数。如果错误发生而且optstring的第一个字符是冒号而且外部变量opterr非0,则getopt打印错误信息。