c - 无法实现从文件中检索 n 字节的(稳定)方法

标签 c io stdio file-handling

我正在开发的库的目的之一是从文件中检索指定数量的字节,在这种特定情况下,我希望访问 /dev/random 以检索基于熵的随机序列。

我对 fread 的主要问题是它会在等待更多熵时无限期挂起,这是不需要的。我的下一个选择是用 feof 包装 fread 以获取 block 中的字节,然后我至少可以提供完成百分比以获得更好的体验,尽管从我可以收集到的迭代 1、2、3、4.. 的字节将是很难追踪到恰好等于所需的数量。

C 标准中是否有一种方法允许我正在寻找的东西、所需的确切数量和 block ?如果我要寻找超时时间,线程化数据请求是否是一个不错的选择?

最佳答案

定义“标准”。你的意思是ISO C标准? POSIX? Linux 标准库 (LSB)?对于 POSIX,read调用允许您指定您尝试读取的缓冲区的大小。您可以使用 pselectpoll确定是否有字节可供读取,超时而不是阻塞。在 Linux 上,可以使用“FIONREAD”ioctl调用以获取可用于读取的确切字节数。

也就是说,您应该问问自己是否需要那个级别的熵。您可能(或可能不会)能够从“/dev/urandom”中读取信息。当然,您必须确定是否属于这种情况。

关于c - 无法实现从文件中检索 n 字节的(稳定)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508437/

相关文章:

go - 对于大内容,go io.copy 函数中的错误一致

c - 'FILE' 在 Contiki 中是未知类型

c++ - 将 yyin 设置为 "emulated"文件*?

c++ - VC++ 2008 Express 上的编译器问题,看似正确的代码会引发错误

c - stat64 一个大(~5GB)文件

C程序字符串困惑

c - 无法构建 zpipe.c(Zlib 示例程序)

关于 fgets() 函数字符限制的 C 编程?

java - 用于根据规则集重命名/移动文件的 Java API

c - 程序正在跳过 fgets 且不允许输入