ioctl是iocontrol的縮寫,就是IO控制。
行為上:
簡單來說,如果你在寫驅動程式時候,碰到一些IO操作,在邏輯上不能歸類到read,不能歸類到write,那就可以認為是ioctl的部分。
read和write應該是寫入和讀出資料的,應該是作為單純的資料交換的方式來處理。而ioctl則是控制read和write一些選項的。比如:你做了一個通用的讀寫IO埠的驅動模組。read和write是從埠讀寫資料的,但是更改讀寫的埠,這個操作應該如何處理呢?顯然用ioctl來實現比較合理。比如你的read和write是可以阻塞的,或者不能阻塞的,或者對裝置檔案的讀寫是可以併發的,或者是不可以併發的,這些都可以寫成可以用ioctl來配置的情況。後面為了可以用ioctl來實現模組不同的IO特點。
引數上,ioctl的一般引數格式就是命令字(常量)+命令引數的方式。
read和write的引數格式都是資料緩衝區+資料目的地指標+長度。
ioctl是iocontrol的縮寫,就是IO控制。
行為上:
簡單來說,如果你在寫驅動程式時候,碰到一些IO操作,在邏輯上不能歸類到read,不能歸類到write,那就可以認為是ioctl的部分。
read和write應該是寫入和讀出資料的,應該是作為單純的資料交換的方式來處理。而ioctl則是控制read和write一些選項的。比如:你做了一個通用的讀寫IO埠的驅動模組。read和write是從埠讀寫資料的,但是更改讀寫的埠,這個操作應該如何處理呢?顯然用ioctl來實現比較合理。比如你的read和write是可以阻塞的,或者不能阻塞的,或者對裝置檔案的讀寫是可以併發的,或者是不可以併發的,這些都可以寫成可以用ioctl來配置的情況。後面為了可以用ioctl來實現模組不同的IO特點。
引數上,ioctl的一般引數格式就是命令字(常量)+命令引數的方式。
read和write的引數格式都是資料緩衝區+資料目的地指標+長度。