【问题标题】:C - how to allow unrecognized options in Argp or Getopt?C - 如何在 Argp 或 Getopt 中允许无法识别的选项?
【发布时间】:2026-01-18 10:40:01
【问题描述】:

我正在编写使用一些参数的 FUSE 文件系统。我想将所有无法识别的选项传递给 FUSE(因为它有自己的选项)。我可以使用argpgetopt 来做到这一点吗?现在两者都给我“未知选项”错误。

【问题讨论】:

  • 解析(和传递)未知选项到 FUSE 的困难在于你不知道选项是否带参数,所以你不知道如何继续准确地解析。捆绑选项也可能存在问题(ls -ltr-ltr 中有一组捆绑选项;它也可以写成ls -l -t -r 并具有相同的效果)。很大程度上取决于已经生效的规则。

标签: c arguments getopt argp


【解决方案1】:

Argp

来自the "Argp Flags" section of the documentation

ARGP_NO_ERRS

不要将未知选项的错误消息打印到 stderr;除非这 标志被设置,ARGP_PARSE_ARGV0 被忽略,argv[0] 被用作 错误消息中的程序名称。该标志暗示ARGP_NO_EXIT。 这是基于假设错误时静默退出是不好的 行为。

获取选择

对于getopt(以及getopt_longgetopt_long_only),您只需在调用函数之前将全局变量opterr 设置为0。或者,您可以使用带有前导: 字符的短选项字符串,如":o:v" 来处理-o output-file-v(如果-o 缺少其参数,则返回:,如果?找到您的选项字符串中不存在的任何选项)。

【讨论】: