2014-02-26 43 views
0

我想通過ioctl從設備驅動程序讀取結構,在用戶空間中更改結構中的值,然後將其寫回。如果沒有其他進程在讀寫之間改變結構,是否可以自動進行?Linux設備驅動程序原子GET,然後通過ioctl設置

可以在調用之前鎖定文件描述符(flock()),然後解鎖?或者,我可以實現鎖定並解鎖ioctl命令,該命令在驅動程序中設置內部鎖定變量?如果過程死亡會發生什麼,變量如何被清除?

我可以使用sysfs而不是ioctl來實現相同的效果嗎?

回答

0

不容易,這很可能是錯誤的方法。

相反,我會採用「有條件移動」的方法。用戶空間程序檢索當前值,修改它,然後裝配舊值寫入IOCTL用作一個條件:

成功:

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

失敗:

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

這樣,如果用戶空間程序不遵循協議,內核不必保留任何需要清理的狀態。