1

在 C 中,stdin是一个有效的文件指针,因此如果我们愿意或需要,我们可以将stdin(和其他 2 个)与输入函数的“文件”版本一起使用。

为什么我们可能需要(而不仅仅是从 shell 管道输入)?请问有人可以举一些例子吗?

4

2 回答 2

5

这是一个例子:

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

fgets(buf, sizeof buf, input);

现在您可以使用您的工具 asmagic data.txt和 as magic < data.txt

于 2013-09-21T15:56:30.420 回答
1

如果您编写一个适用于 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");

于 2013-09-21T15:58:38.893 回答