为什么我们需要stdin作为输入函数的文件版本?

时间:2013-09-21 15:53:46

标签: c

在C中, stdin 是一个有效的文件指针,因此我们可以使用 stdin (以及另外两个)输入函数的“file”版本想要或需要。

为什么我们需要(而不仅仅是从shell中输入)?有人可以提出一些例子吗?

2 个答案:

答案 0 :(得分:5)

以下是一个例子:

FILE * input = argc == 2 ? fopen(argv[1], "r") : stdin;

fgets(buf, sizeof buf, input);

现在,您可以将工具用作magic data.txtmagic < data.txt

答案 1 :(得分:1)

如果您编写的函数适用于任何FILE *,并且在更高级别,您决定要将输出转到stdout。或者从任何FILE *阅读,而您决定阅读stdin

例如,如果您使用计算文件中字符的程序wc,您将看到它可以从stdin或从作为命令行参数给出的文件名读取。可以在main中做出此决定,方法是检查用户是使用$ wc file.txt提供的文件名还是仅使用wc调用的文件名,还是来自其他内容的管道输入$ ls -l | wc

$ wc # reads from stdin
$ wc file.txt # counts characters in file.txt
$ ls -l | wc # reads from stdin also.

你可以想象一个简单的主要内容:

int count_chars(FILE *in);

int main(int argc, char *argv) {
    if (argc == 2) {  // if there is a command line argument
        FILE *input = fopen(argv[1], "r");  // open that file 
        count_chars(input);   // count from that file
    } else {
        count_chars(stdin);   // if not, count from stdin
    }
    return 0;
}

除了打印错误之外,还可以使用fprintf(stderr, "an error occured\n");