我有一个C程序,期望用几个选项和一个非选项参数调用(即没有相关的选项字母),并使用getopt来解析这些选项。例如,可以通过以下方式调用它:
例1:
myProgram -a "aParam" -b "bParam" "xParam"
我一直在使用SLES10,这些选项可以按任何顺序运行。例如,非选项参数“xParam”可能首先出现:
例2:
myProgram "xParam" -a "aParam" -b "bParam"
但是,在SLES11中进行测试时,似乎getopt一旦到达非选项参数就会停止处理,因此上面的示例2不起作用。
我已经阅读了getopt手册页,看到这可能是相关的:
如果optstring的第一个字符是'+'或者设置了环境变量POSIXLY_CORRECT,那么只要遇到nonoption参数,选项处理就会停止。
我不确定SLES11默认是否设置POSIXLY_CORRECT。 在SLES11中获取旧SLES10 getopt行为的最佳方法是什么?
答案 0 :(得分:1)
事实证明,默认情况下它会重定向到_posix_getopt(),这会导致我上面描述的行为。
我最终找到了可能的解决方案: