WEB开发网
开发学院操作系统Linux/Unix 使用 getopt() 进行命令行处理 阅读

使用 getopt() 进行命令行处理

 2008-11-13 08:31:44 来源:WEB开发网   
核心提示: 既然已经完成了参数和选项的收集工作,接下来就可以执行程序所设计的任何功能(在本例中是进行文档转换),使用 getopt() 进行命令行处理(6),然后退出(清单 9),清单 9. 开始工作convert_document();return EXIT_SUCCESS;}好,在 getopt_

既然已经完成了参数和选项的收集工作,接下来就可以执行程序所设计的任何功能(在本例中是进行文档转换),然后退出(清单 9)。

清单 9. 开始工作

convert_document();
  
  return EXIT_SUCCESS;
}

好,工作完成,非常漂亮。现在就可以不再往下读了。不过,如果您希望程序符合 90 年代末期的标准并支持 GNU 应用程序中流行的长 选项,则请继续关注下面的内容。

复杂命令行处理: getopt_long()

在 20 世纪 90 年代(如果没有记错的话),UNIX 应用程序开始支持长选项,即一对短横线(而不是普通短 选项所使用的单个短横线)、一个描述性选项名称还可以包含一个使用等号连接到选项的参数。

幸运的是,可以通过使用 getopt_long() 向程序添加长选项支持。您可能已经猜到了,getopt_long() 是同时支持长选项和短选项的 getopt() 版本。

getopt_long() 函数还接受其他参数,其中一个是指向 struct option 对象数组的指针。此结构相当直接,如清单 10 中所示。

清单 10. getopt_long() 的选项

struct option {
  char *name;
  int has_arg;
  int *flag;
  int val;
};

name 成员是指向长选项名称(带两个短横线)的指针。has_arg 成员设置为 no_argument、optional_argument, 或 required_argument(均在 getopt.h 中定义)之一,以指示选项是否具有参数。如果 flag 成员未设置为 NULL,在处理期间遇到此选项时,会使用 val 成员的值填充它所指向的 int 值。如果 flag 成员为 NULL,在 getopt_long() 遇到此选项时,将返回 val 中的值;通过将 val 设置为选项的 short 参数,可以在不添加任何其他代码的情况下使用 getopt_long()——处理 while loop 和 switch 的现有 getopt() 将自动处理此选项。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:使用 getopt 进行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接