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

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

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

在C标准中是否有一种方法允许我正在寻找的东西,确切的数量和大块? 如果我要寻找超时,那么线程化数据请求是一个很好的选择吗?

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

也就是说,你应该问自己是否需要这种程度的熵。 您可能(或可能不)能够从“/ dev / urandom”中读取内容。 当然,你必须确定是否是这种情况。

试试这个

这是我认为将解决您的问题的函数的手册页。

http://www.manpagez.com/man/3/fgets/

我刚刚看到fread没有工作,fgets从文件流中读取一定数量的字节到缓冲区