c - 有没有办法在 C 中倒带标准输入?

标签 c

所以我的代码应该通过命令行查看文本文件

 ./program < text.txt

这种执行程序的方式对我的目的很重要。

但是在通过它之后,所有其他方法都已经查看了文本文件的末尾。

我试图遍历一个提供的文本文件,但是一旦一个函数读取它一次,可能指针已经停留在文件的末尾并且其他函数不再工作。

所以就有了最基本的函数就是用这个了。 一旦我尝试使用相同的 for 循环的任何其他功能,它就不再工作了。我想它是指针,但我还没有成功找到刷新它的方法。

void writeOut()
{
    char line[100];
    for(; fgets(line, 100, stdin) != NULL;)
    {
        fprintf(stdout,"%s", line);

    }
    fprintf(stdout,"\n");
}

我希望能够多次读取同一个文件并能够“刷新”fgets() 的内存。

感谢任何有用的输入

最佳答案

The rewind() and fseek() functions是重新定位流的传统方法支持这样做。并非所有流都支持它,您是否支持不仅取决于您的 C 实现,还取决于您的操作环境和程序启动的具体情况。

我通常倾向于期望与重定向输入相关联的流支持重新定位,因此即使它在您的特定情况下有效,您还是明智地考虑一个更可靠的替代方案。

特别是,您可以创建一个临时文件,将标准输入复制到其中,然后使用该文件。您可以提前执行复制,也可以在执行第一个普通运行时执行复制。如果您需要专门从 stdin 重新读取数据,而不是从您打开的其他流中读取数据,那么您可以使用 freopen()stdin 附加到您的临时文件。

关于c - 有没有办法在 C 中倒带标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670828/

相关文章:

android - 错误 : OSCOKIRQ failed to assert

c++ - 关于内联性能的问题

c - 标准输出上的数据显示错误 : C File Operation

c - ANSI C (C89) 中的 Stdint.h

c - Libnet TCP 校验和错误

c - 在同一结构中使用结构成员作为数组大小

c - __write_overflow 声明属性错误

c - 如何检查 C 中的 union 是否不是 "initialized"?

c - C 中的 R3Route URL 路由器

c - ANSI C YACC 语法中的歧义