我似乎无法在文档中找到关于此的信息。
read
系统调用文档说它可能比指定的读取少。
read
是否尝试多次读取?
我知道 fread
是 read
的包装器。当我调用 fread
时,它是否可能会多次从流中读取直到它获得 0 或读取指定的字节,或者它只会尝试读取一次?
我正在读取在我的内核模块中创建的字符设备,它从数据结构传输信息并支持部分读取。我有兴趣读取所有数据,直到它返回 0。
谢谢
最佳答案
read
的总体思路|是它会在某些数据可用时立即返回¹。从应用程序的角度来看,这就是您可以假设的全部内容。
如果您正在实现 read
内核驱动程序中的回调,这取决于你什么时候read
决定返回一些数据。但是应用程序将²期望read
调用可能是部分的,他们应该调用 read
如果他们确实需要一定数量的字节,则在循环中。一些应用程序需要 read
不要阻止,所以阻止 read
是个坏主意如果有一些数据可用,请调用。
fread
函数阻塞,直到它读取了请求的字节数,直到它到达文件末尾,或者直到发生错误。它通过调用 read
来工作在一个循环中。
¹ 是否以及何时read
可能返回 0 字节超出了这个答案的范围。 子>
² 或者至少应该。有缺陷的应用程序确实存在。 子>
关于c - read, fread 部分读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53452824/