【问题标题】:How to reuse (rewind) a redirected file in C如何在 C 中重用(倒带)重定向文件
【发布时间】:2015-06-09 02:13:27
【问题描述】:

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

MyProgram.exe < "data.txt"

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

(我想计算任意大小的文件中的行数,以便初始化一个数组,然后我想使用getchar() 和/或scanf() 重新读取该文件。

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

【问题讨论】:

  • 你不能倒带
  • 你真的试过倒带吗?当 stdin 是常规文件时 fseek 仅在 stdin 上工作,而当您像这样重定向时,stdin 是常规文件。
  • @Lashane:鉴于标准输入来自磁盘文件,它可以像连接到磁盘文件的任何其他文件流一样倒带。

标签: c input flush io-redirection rewind


【解决方案1】:

但是,由于这是一个重定向文件,我不能使用 c 文件指针来回退缓冲区。

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

rewind(stdin);

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

【讨论】:

  • 假设stdin 是一个文件是一个坏主意。正确的方法是不要存储所需的历史记录。
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2013-05-10
  • 2018-06-01
  • 2017-01-17
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2021-06-21
相关资源
最近更新 更多