如何在 C 中重用(倒回)重定向的文件

How to reuse (rewind) a redirected file in C

我在终端中使用 < I/O 重定向将文本文件输入到我的 C 程序中:

MyProgram.exe < "data.txt"

然后在我的代码中使用 getchar()scanf() 来读取重定向的输入。但是,由于这是一个重定向文件,我不能使用 C 文件指针来倒回缓冲区。

(我想计算一个任意大小的文件中的行数,这样我就可以初始化一个数组,然后我想使用 getchar() and/or scanf()).

如何在使用重定向输入时实现倒带或刷新?

However, as this is a redirected file, I cant use a c file pointer to rewind the buffer.

当然可以!这真的很容易。当文件被重定向到标准输入时,stdin 是一个文件,因此您可以像对待任何其他文件一样对待它:

rewind(stdin);

但请记住,这仅在标准输入从文件重定向 时才有效。如果标准输入来自终端或管道(例如,cat file.txt | myapp),它将不起作用。