为什么在c中使用getopt时opstring无法创建预期的响应?

我正在尝试为正在编写的程序编写一个getopt()模块,由于某种原因,我的getopt()实现无法正常工作。

#include "setopt.h"
#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

struct flags_t getFlags(int argc, char** argv) {
    struct flags_t ourflags;
    int opt;

    ourflags.threadpool = 4;

    while (1) {
        opt = getopt(argc, argv, "N:l:");
        if (opt == -1) {
            //printf("getting bad read -1\n");
            break;
        }

        switch (opt) {
            case 'l' : 
                strcpy(ourflags.logfilename, optarg);
                break;
            case 'N' : 
                ourflags.threadpool = atoi(optarg);
                break;
            default :
                printf("unkown flag %c\n", opt);
                exit(-1);
        }


    }

    const int requiredargs = 1;

    if (argc - optind != requiredargs) {
        printf("incorrect amount of flags, wanted : %d: got %d\n", 
                        requiredargs, (argc - optind));
        exit(-1);
    }

    ourflags.port = atoi(argv[optind]);

    return ourflags;
}

当我使用运行程序时

./setopt 8080 -N 6 -l log_file

我得到了输出

incorrect amount of flags, wanted : 1: got 5

我认为问题出在我的optstring参数中,但是我不确定。我不能让他接案。任何帮助,将不胜感激。

评论