为什么 Linux 内核的 sysfs API 中的存储函数需要返回已使用的字节?

maa*_*ank 3 linux kernel sysfs

从文档中:

  • store() 应该返回缓冲区使用的字节数。如果整个缓冲区已被使用,则仅返回计数参数。

它对这个值有什么作用?如果我从大小为 FOO 的缓冲区读取 4 个字节而不是 6 个字节,有什么区别?

Sha*_*baz 5

您必须意识到,通过实现 sysfs 文件,您试图表现得像一个文件。

让我们先从另一面来看这一点。从手册页fwrite(3)

返回值
fread() 和 fwrite() 返回成功读取或写入的项目数(即,不是字符数)。如果发生错误或到达文件结尾,则返回值是短项目计数(或零)。

更好的是,从手册页write(2)

例如,如果底层物理介质上没有足够的空间,或者遇到 RLIMIT_FSIZE 资源限制(请参阅 setrlimit(2)),或者调用被信号处理程序中断,则写入的字节数可能小于 count。写入的字节数少于 count 个字节。(另请参见管道(7)。)

这意味着store(),为您的特定文件实现函数另一端的write(2)应该返回写入的字节数(即您读取的字节数),以便至少write(2)可以将该值返回给用户。

在大多数情况下,如果输入没有错误,您只想返回count以确认您已阅读所有内容并且一切正常。