在 C 中,stdin是一个有效的文件指针,因此如果我们愿意或需要,我们可以将stdin(和其他 2 个)与输入函数的“文件”版本一起使用。
为什么我们可能需要(而不仅仅是从 shell 管道输入)?请问有人可以举一些例子吗?
在 C 中,stdin是一个有效的文件指针,因此如果我们愿意或需要,我们可以将stdin(和其他 2 个)与输入函数的“文件”版本一起使用。
为什么我们可能需要(而不仅仅是从 shell 管道输入)?请问有人可以举一些例子吗?
这是一个例子:
FILE * input = argc == 2 ? fopen(argv[1], "r") : stdin;
fgets(buf, sizeof buf, input);
现在您可以使用您的工具 asmagic data.txt
和 as magic < data.txt
。
如果您编写一个适用于 any 的函数FILE *
,并且在更高级别上您决定要输出到stdout
. 或者从 anyFILE *
中读取,而您决定从stdin
.
例如,如果您wc
使用计算文件中字符数的程序,您会看到它可以读取stdin
或读取作为命令行参数给出的文件名。可以main
通过检查用户是否提供了文件名$ wc file.txt
或使用 just 调用了文件名,或者通过wc
管道输入了其他内容来做出此决定$ ls -l | wc
$ wc # reads from stdin
$ wc file.txt # counts characters in file.txt
$ ls -l | wc # reads from stdin also.
你可以想象一个简单的 main 上面写着:
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");