我正在编写一个程序,它将生成文件的哈希值或stdin的字符串。但是,fseek和ftell将无法在stdin上运行,因此我无法保留缓冲区,将stdin倒回到开头,并且整个流都会出现问题。那么有什么简单的方法可以做到这一点吗?或者我应该每次只读n个字符并将其发送到每个哈希的状态更新函数?
答案 0 :(得分:2)
如果您认为 stdin 始终是文本的,您可以使用getline(3)从中读取整行。
如果你想处理任意输入(包括非文本 stdin ),你应该在一个相当大的块(例如4K或16K字节)的循环中使用fread(3)并进入帐户部分读取。该块可能包含空字节。您将更新循环内的状态。
你可以在中间进行部分阅读,例如如果您正在Linux上阅读管道(popen(3) ....)...