【问题标题】:Linux device driver atomic GET then SET via ioctlLinux 设备驱动程序原子 GET 然后通过 ioctl 设置
【发布时间】:2014-02-26 12:46:22
【问题描述】:

我想通过 ioctl 从设备驱动程序读取结构,更改用户空间结构中的值,然后将其写回。这是否可以在不改变读写之间结构的其他进程的情况下以原子方式进行?

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

我可以使用 sysfs 而不是 ioctl 来达到同样的效果吗?

【问题讨论】:

    标签: linux driver atomic ioctl


    【解决方案1】:

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

    相反,我会采用“有条件移动”的方法。用户空间程序检索当前值,对其进行修改,然后将旧值附加到写入 IOCTL 以用作条件:

    成功:

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

    失败:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 2012-08-21
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多