读取,读取部分读取

时间:2018-11-23 20:52:59

标签: c linux system-calls fread

我似乎在文档中找不到有关此信息。

read系统调用文档说,它的读取内容可能少于指定的内容。 read是否尝试阅读几次?

我知道freadread的包装。当我调用fread时,是否有可能从流中读取多次直到它变为0或读取指定的字节,还是仅尝试读取一次?

我正在从内核模块中创建的char设备读取数据,它从数据结构中传输信息并支持部分读取。我有兴趣读取所有数据,直到它返回0。

谢谢

1 个答案:

答案 0 :(得分:2)

read的一般思想是,只要有可用数据,它就会返回¹。从应用程序的角度来看,这就是您可以假设的全部内容。

如果您要在内核驱动程序中实现read回调,则由read决定返回一些数据由您自己决定。但是应用程序会²期望read调用可能是部分调用,如果确实需要一定数量的字节,则应在循环中调用read。某些应用程序希望read不阻塞,因此如果有可用数据,则阻塞read调用将是一个坏主意。

fread函数将一直阻塞,直到读取所需的字节数为止,直到到达文件末尾或发生错误为止。它可以通过循环调用read来工作。

¹ read是否以及何时返回0字节超出了此答案的范围。
²或者至少应该如此。越野车应用程序确实存在。