4

我有一个 C 程序,它期望使用多个选项和 1 个非选项参数(即没有关联的选项字母)调用,并使用 getopt 解析这些选项。例如,它可以被调用:

示例 1: myProgram -a "aParam" -b "bParam" "xParam"

我一直在使用 SLES10,并且这些选项按任何顺序工作。例如,非选项参数“xParam”可以先出现:

示例 2: myProgram "xParam" -a "aParam" -b "bParam"

但是,在 SLES11 中进行测试时,似乎 getopt 一到达非选项参数就停止处理,因此上面的示例 2 不起作用。

我已经阅读了 getopt 手册页,发现这可能是相关的:

如果 optstring 的第一个字符是 '+' 或设置了环境变量 POSIXLY_CORRECT,则一旦遇到非选项参数,选项处理就会停止。

我不确定 SLES11 是否默认设置 POSIXLY_CORRECT。在 SLES11 中获得旧的 SLES10 getopt 行为的最佳方法是什么?

4

1 回答 1

1

事实证明,默认情况下它重定向到 _posix_getopt(),这导致了我上面描述的行为。

我最终找到的可能解决方案:

  1. 请改用 getopt_long()。这似乎没有 posix 等价物。
  2. 定义 _GNU_SOURCE,它会停止重定向。
  3. 手动重新排序参数,可能使用包装器 shell 脚本。
于 2012-11-15T20:46:12.470 回答