【问题标题】:Read entire stdin until EOF in C在 C 中读取整个标准输入直到 EOF
【发布时间】:2023-03-06 06:35:01
【问题描述】:

我正在编写一个程序,它将为文件或来自标准输入的字符串生成哈希值。但是,fseek 和 ftell 不能在标准输入上工作,所以我不能保留缓冲区、将标准输入倒回到开头,并吞下整个流。那么有什么简单的方法可以做到这一点吗?还是我应该每次只读取 n 个字符并将其发送到每个哈希的状态更新函数?

【问题讨论】:

  • "或者我应该每次只读取 n 个字符并将其发送到每个哈希的状态更新函数吗?" - 是的。
  • 第二个选项(一次发送 n 个字符,完成后最后发送)是我的做法。
  • 详细信息可能因操作系统而异。

标签: c hash stdin


【解决方案1】:

如果您认为 stdin 始终是文本的,则可以使用 getline(3) 从中读取整行。

如果您想处理任意输入(包括非文本 stdin),您应该在一些相当大的块(例如 4K 或 16K 字节)上循环使用 fread(3) 并考虑部分读。该块可能包含空字节。您将更新循环内的状态。

您可以在中间进行部分读取,例如如果您在 Linux 上从管道(使用popen(3) ....)读取...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2015-10-20
    • 2015-06-02
    相关资源
    最近更新 更多