c - getopt 在 C 中添加额外功能

标签 c getopt

这是我的问题。我希望能够在我的应用程序中支持这一点:

./cipher [-devh] [-p PASSWD] infile outfile

我设法获得了 [-devh] 支持,但我不知道如何获得 [-p PASSWORD] 支持。当然,我可以手动检查 argc 是否为 2,然后得到一堆标志,但我更喜欢使用 getopts 并且认为它会更容易。这是我的 [-devh] 代码,我如何扩展它以便它可以支持其余的内容?

while ( (c = getopt(argc, argv, "devh")) != -1) {
    switch (c) {
    case 'd':
        printf ("option d\n");
        dopt = 1;
        break;
    case 'e':
        printf ("option e\n");
        eopt = 1;
        break;
    case 'v':
        printf ("option v\n");
        vopt = 1;
        break;
    case 'h':
        printf ("option h\n");
        hopt = 1;
        break;

    default:
        printf ("?? getopt returned character code 0%o ??\n", c);
    }
}

最佳答案

直接取自GNU C Library Reference getopt 上的页面:

while ((c = getopt (argc, argv, "abc:")) != -1)
    switch (c)
    {
        case 'a':
            aflag = 1;
            break;
        case 'b':
            bflag = 1;
            break;
        case 'c':
            cvalue = optarg;
            break;
        case '?':
            if (optopt == 'c')
                fprintf (stderr, "Option -%c requires an argument.\n", optopt);
            else if (isprint (optopt))
                fprintf (stderr, "Unknown option `-%c'.\n", optopt);
            else
                fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt);
            return 1;
        default:
            abort();
    }

c 这里是带有可选参数的参数,所以这可能是您正在寻找的语法。

我理解 getopt 所做的是循环给定的参数,一次解析它们。因此,当它到达需要第二个参数的选项c(在您的情况下为p)时,它将存储在optarg中。它被分配给您选择的变量(此处为cvalue)以供稍后处理。

关于c - getopt 在 C 中添加额外功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582902/

相关文章:

c++ - 可变参数函数的内联

c - C如何确定数组的边界?

c - getopt:无法识别缺少的参数 ' : ' 和无效的参数 ' ? '

c - D-Bus 是否保证消息传递?

c - 使用函数的反数 - 如何解决这个输出问题?

c - 多个 char* 比较的段错误

c++ - `getopt` 的段错误

bash - getopt后 'set -- $args'的作用是什么?

c - Getopt - 需要输入

perl - 如何让 Getopt::Long + pod2usage 工作?