在C中, stdin 是一个有效的文件指针,因此我们可以使用 stdin (以及另外两个)输入函数的“file”版本想要或需要。
为什么我们需要(而不仅仅是从shell中输入)?有人可以提出一些例子吗?
答案 0 :(得分:5)
以下是一个例子:
FILE * input = argc == 2 ? fopen(argv[1], "r") : stdin;
fgets(buf, sizeof buf, input);
现在,您可以将工具用作magic data.txt
和magic < 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");