-6

これが私の質問です。アプリケーションでこれをサポートできるようにしたい:

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

サポートを受けることはできましたが、[-devh]サポートを受ける方法がわかりません[-p PASSWORD]。もちろん、存在を手動で確認しargc2から、多数のフラグを設定することもできますが、私は使用することを好み、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);
    }
}
4

1 に答える 1

0

のGNU C ライブラリ リファレンスページから直接取得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しているのは、指定された引数をループして、一度に 1 つずつ解析することです。したがって、2 番目の引数が必要なオプションc(この場合は ) に到達すると、それは に格納されます。これは、後で処理するために、選択した変数 (ここでは ) に割り当てられます。poptargcvalue

于 2013-09-03T01:54:21.543 に答える