【发布时间】:2021-04-07 17:50:09
【问题描述】:
我有 2 个关于使用这些功能的问题。我不完全理解here写的文档:
sysfs 分配一个大小为 (PAGE_SIZE) 的缓冲区并将其传递给 方法。 Sysfs 每次读取都会调用该方法一次,或者 写。这会在方法上强制执行以下行为 实现:
在 read(2) 时,show() 方法应该填满整个缓冲区。 回想一下,一个属性应该只导出一个值,或者一个 类似值的数组,所以这不应该那么昂贵。
这允许用户空间进行部分读取和前向搜索 随意翻遍整个文件。如果用户空间回溯到 零或执行偏移量为 '0' 的 pread(2),show() 方法将 再次调用,重新配置,以填充缓冲区。
在 write(2) 时,sysfs 期望整个缓冲区在 先写。然后 Sysfs 将整个缓冲区传递给 store() 方法。 在商店的数据之后添加一个终止的空值。这使得 sysfs_streq() 等函数可以安全使用。
在写入 sysfs 文件时,用户空间进程应该首先读取 整个文件,修改它希望更改的值,然后写入 整个缓冲回来。
首先,当我使用read/write 读取/写入 sysfs 属性文件时,我是否保证我读取到的缓冲区/store 函数中的缓冲区将包含我想要读取的所有字节函数,而不是分块调用?
另外,空字符是如何添加的?也就是假设我写了n个字节,会不会在函数参数中写入的字节数为n,而null char会放在n+1处?
谢谢
【问题讨论】:
标签: linux linux-kernel linux-device-driver sysfs