在 Mac OS X 中获取选择
getopt in Mac OS X
我需要使用 getopt
函数解析参数。问题是如果我在选项之后的 and/or 之前有参数,getopt
就不起作用。一旦遇到非选项参数,选项处理就会停止。
例如:tftp ip port [-b blksize] src dest
不起作用。
但是 tftp [-b blksize] ip port src dest
效果很好。
显然,我需要在 optstring
的开头添加 +
才能混合参数和选项,但根据 [,Max OS X 不支持它=18=]
你有解决办法吗?谢谢。
将您传递给 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;
}
这只是一个例子。判断是否有命令或子命令的逻辑由你决定。
我需要使用 getopt
函数解析参数。问题是如果我在选项之后的 and/or 之前有参数,getopt
就不起作用。一旦遇到非选项参数,选项处理就会停止。
例如:tftp ip port [-b blksize] src dest
不起作用。
但是 tftp [-b blksize] ip port src dest
效果很好。
显然,我需要在 optstring
的开头添加 +
才能混合参数和选项,但根据 [,Max OS X 不支持它=18=]
你有解决办法吗?谢谢。
将您传递给 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;
}
这只是一个例子。判断是否有命令或子命令的逻辑由你决定。