我似乎在文档中找不到有关此信息。
read
系统调用文档说,它的读取内容可能少于指定的内容。
read
是否尝试阅读几次?
我知道fread
是read
的包装。当我调用fread
时,是否有可能从流中读取多次直到它变为0或读取指定的字节,还是仅尝试读取一次?
我正在从内核模块中创建的char设备读取数据,它从数据结构中传输信息并支持部分读取。我有兴趣读取所有数据,直到它返回0。
谢谢
答案 0 :(得分:2)
read
的一般思想是,只要有可用数据,它就会返回¹。从应用程序的角度来看,这就是您可以假设的全部内容。
如果您要在内核驱动程序中实现read
回调,则由read
决定返回一些数据由您自己决定。但是应用程序会²期望read
调用可能是部分调用,如果确实需要一定数量的字节,则应在循环中调用read
。某些应用程序希望read
不阻塞,因此如果有可用数据,则阻塞read
调用将是一个坏主意。
fread
函数将一直阻塞,直到读取所需的字节数为止,直到到达文件末尾或发生错误为止。它可以通过循环调用read
来工作。
¹ read
是否以及何时返回0字节超出了此答案的范围。
²或者至少应该如此。越野车应用程序确实存在。