首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sysfs show()和store()函数

使用sysfs show()和store()函数
EN

Stack Overflow用户
提问于 2018-11-21 15:35:52
回答 2查看 1.9K关注 0票数 0

关于使用这些函数,我有两个问题。我不完全理解编写的这里文档

sysfs分配一个大小缓冲区(PAGE_SIZE)并将其传递给该方法。Sysfs将为每次读或写精确调用一次该方法。这在方法实现上强制执行以下行为:

  • 在read(2)上,show()方法应该填充整个缓冲区。回想一下,属性应该只导出一个值,或者一个类似的值数组,所以这不应该那么昂贵。 这允许用户空间任意对整个文件进行部分读取和转发。如果userspace寻求返回到零,或者做一个偏移量为'0‘的扩展(2),那么show()方法将再次被调用,重新武装,以填充缓冲区。
  • 在写(2)上,sysfs期望在第一次写时传递整个缓冲区。然后Sysfs将整个缓冲区传递给store()方法。在存储上的数据之后添加终止null。这使得像sysfs_streq()这样的函数可以安全地使用。 在编写sysfs文件时,用户空间进程应该首先读取整个文件,修改它希望更改的值,然后将整个缓冲区写回。

首先,当我用read/write读取/写入sysfs属性文件时,是否可以保证我读取到的/ store函数中的缓冲区将拥有我想要在该函数中读取的所有字节,而不是以几个块的形式调用它?

另外,空字符是如何添加的?也就是说,假设我编写了n个字节,函数参数中的写字节数是否为n,空字符将放置在n+1?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-22 22:24:06

第一个问题的答案是是的-部分写不支持,缓冲区总是在一个调用的显示方法。

第二个问题的答案也是肯定的。请参见由sysfs使用的实现kernfs_fop_write() -它将分配到PAGE_SIZE+1字节,以便有足够的空间容纳\0。

票数 1
EN

Stack Overflow用户

发布于 2021-04-06 21:27:06

它分配PAGE_SIZE,如果>= PAGE_SIZE被写入,它会用'\0'截断到PAGE_SIZE,并记录一个错误。如果编写了> PAGE_SIZE,可能会损坏内核内存。

为了进行保护,您应该使用额外的sysfs_emitsysfs_emit_at来写入缓冲区。见文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53415524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档