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

时间:2013-04-15 13:09:59

标签: linux kernel sysfs

来自文档:

  
      
  • store()应该返回缓冲区中使用的字节数。如果   已经使用了整个缓冲区,只返回count参数。
  •   

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

1 个答案:

答案 0 :(得分:4)

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

让我们先看看另一面。来自fwrite(3)的手册页:

  

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

甚至更好,来自write(2)的手册页:

  

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

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

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