gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:55 25 4
gpt4 key购买 nike

我想通过 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

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

关于Linux 设备驱动程序原子 GET 然后通过 ioctl SET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com