Linux设备驱动程序原子GET,然后通过ioctl设置

问题描述:

我想通过ioctl从设备驱动程序读取结构,在用户空间中更改结构中的值,然后将其写回。如果没有其他进程在读写之间改变结构,是否可以自动进行?Linux设备驱动程序原子GET,然后通过ioctl设置

可以在调用之前锁定文件描述符(flock()),然后解锁?或者,我可以实现锁定并解锁ioctl命令,该命令在驱动程序中设置内部锁定变量?如果过程死亡会发生什么,变量如何被清除?

我可以使用sysfs而不是ioctl来实现相同的效果吗?

不容易,这很可能是错误的方法。

相反,我会采用“有条件移动”的方法。用户空间程序检索当前值,修改它,然后装配旧值写入IOCTL用作一个条件:

成功:

read      -> 5 
write 10 if currently 5  -> okay 

失败:

read      -> 5 
... someone else changes it ... 
write 10 if currently 5  -> nope 

这样,如果用户空间程序不遵循协议,内核不必保留任何需要清理的状态。