c - 如何选择其中一个选项?

标签 c command-line-arguments unistd.h

我正在试验 POSIX getopt 函数并遇到了一些问题。我想通过命令行参数为应用程序提供一种模式(读取或写入)。所以我试着做这样的事情:

enum mode{
    read,
    write
};
enum mode mode;

int opt;
while((opt = getopt("rw")) != -1){
    switch(opt){
        case 'w':
            mode = write;
            break;
        case 'r':
            mode = read;
            break;
        default:
            fprintf(stderr, "Usage: %s [-r-w]\n", argv[0]");
            exit(1);
    }
}

问题在于它的工作方式,现在可以同时传递 -r-w 选项,这是无意义的。我只想选择两种模式中的一种。

这样做的“惯用”方法是什么?

最佳答案

这太主观了,这不是一个好问题,但这里有一些想法:

(1) 一种方法是只有一个选项。默认行为是读取,如果指定了 -w 选项,则模式是写入。

(2) 一些Unix程序通过说“Last argument wins”来解决问题

(3) 另一种方法是使用单独的变量,并检测两个标志都已设置的条件。

我已经看到了所有三种方法的使用。可能还有其他想法。

关于c - 如何选择其中一个选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53577852/

相关文章:

c# - 将数组作为命令行参数传递给 Asp.Net Core

c - C 中 main 的参数

c - 导入unistd.h后,编译器声明sbrk()是隐式声明。为什么是这样?

objective-c - 使用 execl 从应用程序内部编译文件

c++ - 标准 POSIX 读取被具有不同签名的读取方法遮蔽

c++ - 同时从 SDL 和 OpenGL 渲染

C99:静态库中的动态调度

java - 如何将命令行参数传递给 Junit 测试

c++ - recvfrom 超时(winsock2 和 udp)

objective-c - 比较浮点值有多危险?