我需要使用 getopt
函数解析参数。问题是如果我在选项之前和/或之后有参数,getopt
不起作用。一旦遇到非选项参数,选项处理就会停止。
例如:tftp ip port [-b blksize] src dest
不起作用。
但是 tftp [-b blksize] ip port src dest
运行良好。
显然,我需要在 optstring
的开头添加 +
才能混合参数和选项,但根据 https://www.gnu.org/software/gnulib/manual/html_node/getopt.html,Max OS X 不支持它
你有解决办法吗?谢谢。
最佳答案
将传递给 getopt
的内容更改为 argv
和 argc
以跳过命令部分。
例如,tftp ip port [-b blksize] src dest
你假装 argv[2]
处的 port
是 argv[0]
。调用 getopt(argc - 2, argv + 2, optstring)
。
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int ch;
while( (ch = getopt(argc - 2, argv + 2, "b:")) != -1 ) {
printf("%c %s\n", ch, optarg);
}
return 0;
}
这只是一个例子。您可以添加逻辑来确定是否存在命令或子命令。
关于c - Mac OS X 中的 getopt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850564/