c - Mac OS X 中的 getopt

标签 c macos getopt

我需要使用 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 的内容更改为 argvargc 以跳过命令部分。

例如,tftp ip port [-b blksize] src dest 你假装 argv[2] 处的 portargv[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/

相关文章:

c - 使用用户输入的十六进制值读取 c 中的内存地址

cocoa - 在 OSX 中拦截键盘输入

regex - sed 插入行命令 OSX

c - 如何从命令行将 key=value 解析为 C 程序

c - 将操作数放在 getopt() 的前面

c++ - 内存块之间的逻辑操作?

c - YACC 文件是否有文件包含机制?

为我的路由器内核版本编译特定的内核模块

c++ - 如何在 OSX 的 C++ 应用程序中正确使用文件 I/O 路径?

C 使用 getopt_long()