在执行getOpts时如何从stdout获取输入

时间:2018-02-28 00:08:03

标签: c

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>

int main(int argc, char **argv) {

    int o;
    int a;
    int b = 1;

    while ((o = getopt(argc, argv, "a:b")) != -1) {
        switch (o) {
           case 'a' :
                a = atoi(optarg);
                break;


            case 'b' :
                b = 0;
                break;
            default :
                printf("Error\n");
                exit(1);
        }
    }

    if(optind != 2) {
        int c;
        while((c = getchar()) != EOF) {
            putchar(c);
        }
    }

}

假设这是合法的:

$ gcc -Wall fileAbove.c
$ ./a.out -a14 -b hi
$ ./a.out -a14 hi
$ ./a.out -b hi

以上所有内容都是合法的。如何找到标准输出?

$ echo hello | ./a.out -a14 -b 
hello

$ echo hello | ./a.out -a14
hello

就像我怎么知道没有&#34; ./ a.out -a10 -b(这部分)&#34;,如果我们没有处理标准输出那部分。

1 个答案:

答案 0 :(得分:0)

原因是这个if语句:

if(optind != 2) { ... }
如果你只使用arg optind arg -a(而不是两者),

-b将完全为2,因为那样你就拥有了一个参数,一旦你读了它,下一个opt索引是2.那么你的if条件是假的。