[英]what is the meaning of this macro _IOR(MY_MACIG, 0, int)?
我正在通過ioctl示例程序來檢查它與內核空間的通信方式。 在程序中WRITE_IOCTL用作命令
#define WRITE_IOCTL _IOW(MY_MACIG, 1, int)
ioctl(fd, WRITE_IOCTL, "hello world")
我無法理解什么是_IOW(MY_MACIG, 1, int)
。 這是我下載程序的鏈接。 請幫我。 http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-4.html
您可能知道,ioctl應該是唯一的,如Linux設備驅動程序書中所述:
ioctl命令編號在整個系統中應該是唯一的,以防止由於向錯誤的設備發出正確的命令而導致的錯誤。這種不匹配不太可能發生,程序可能會發現自己試圖改變非波特率。串行端口輸入流,例如FIFO或音頻設備。 如果每個ioctl編號都是唯一的,則應用程序會收到EINVAL錯誤,而不是成功執行無意識的操作。
此外,ioctl可能需要將數據寫入內核空間和/或從內核空間讀取數據。
當一個人創建自己的執行ioctl的驅動程序時,他需要在ioctl命令中描述所有這些。
_IO,_IOW,_IOR,_IORW是輔助宏,用於創建唯一的ioctl標識符並添加所需的R / W所需功能(方向)。
這些可以采用以下參數:幻數,命令ID和將傳遞的數據類型(如果有)
幻數是一個唯一的數字,允許驅動程序檢測錯誤,例如LDD書中引用的錯誤。
命令id是您的驅動程序了解需要調用哪個命令的一種方法。
最后一個參數(類型)將允許內核理解要復制的大小。
希望這可以幫助。
PS:您可以在Linux設備驅動程序一書中獲得更多詳細信息(第6章) https://lwn.net/images/pdf/LDD3/ch06.pdf
來自http://www.circlemud.org/jelson/software/fusd/docs/node31.html :
Linux頭文件/usr/include/asm/ioctl.h
定義了必須用於創建ioctl命令編號的宏。 這些宏采用三種參數的各種組合:
用於生成命令編號的宏是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.