本函式影響由fd引數引用的乙個開啟的檔案。
#include
int ioctl( int fd, int request, ... );
返回0:成功
-1:出錯
第三個引數總是乙個指標,但指標的型別依賴於request引數。
套介面操作 檔案操作
介面操作
arp快取記憶體操作
路由表操作
流系統類別request
說明資料型別套接
口siocatmark
siocspgrp
siocgpgrp
是否位於帶外標記
設定套介面的程序id或程序組id
獲取套介面的程序id或程序組id
intint
int 文
件fionbin
fioasync
fionread
fiosetown
fiogetown
設定/清除非阻塞i/o標誌
設定/清除訊號驅動非同步i/o標誌
獲取接收快取區中的位元組數
設定檔案的程序id或程序組id
獲取檔案的程序id或程序組id
intint
intint
int
接
口siocgifconf
siocsifaddr
siocgifaddr
siocsifflags
siocgifflags
siocsifdstaddr
siocgifdstaddr
siocgifbrdaddr
siocsifbrdaddr
siocgifnetmask
siocsifnetmask
siocgifmetric
siocsifmetric
siocgifmtu
sioc***
獲取所有介面的清單
設定介面位址
獲取介面位址
設定介面標誌
獲取介面標誌
設定點到點位址
獲取點到點位址
獲取廣播位址
設定廣播位址
獲取子網掩碼
設定子網掩碼
獲取介面的測度
設定介面的測度
獲取介面mtu
(還有很多取決於系統的實現)
struct ifconf
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
struct ifreq
arpsiocsarp
siocgarp
siocdarp
建立/修改arp表項
獲取arp表項
刪除arp表項
struct arpreq
struct arpreq
struct arpreq路由
siocaddrt
siocdelrt
增加路徑
刪除路徑
struct rtentry
struct rtentry
流i_***
套介面操作:
明確用於套介面操作的ioctl請求有三個,它們都要求ioctl的第三個引數是指向某個整數的乙個指標。
siocatmark:
如果本套介面的的度指標當前位於帶外標記,那就通過由第三個引數指向的整數返回乙個非0值;否則返回乙個0值。posix以函式sockatmark替換本請求。
siocgpgrp:
通過第三個引數指向的整數返回本套介面的程序id或程序組id,該id指定針對本套介面的sigio或sigurg訊號的接收程序。本請求和fcntl的f_getown命令等效,posix標準化的是fcntl函式。
siocspgrp:
把本套介面的程序id或者程序組id設定成第三個引數指向的整數,該id指定針對本套介面的sigio或sigurg訊號的接收程序,本請求和fcntl的f_setown命令等效,posix標準化的是fcntl操作。
檔案操作:
以下5個請求都要求ioctl的第三個引數指向乙個整數。
fionbio:
根據ioctl的第三個引數指向乙個0或非0值分別清除或設定本套介面的非阻塞標誌。本請求和o_nonblock檔案狀態標誌等效,而該標誌通過fcntl的f_setfl命令清除或設定。
fioasync:
根據iocl的第三個引數指向乙個0值或非0值分別清除或設定針對本套介面的訊號驅動非同步i/o標誌,它決定是否收取針對本套介面的非同步i/o訊號(sigio)。本請求和o_async檔案狀態標誌等效,而該標誌可以通過fcntl的f_setfl命令清除或設定。
fionread:
通過由ioctl的第三個引數指向的整數返回當前在本套介面接收緩衝區中的位元組數。本特性同樣適用於檔案,管道和終端。
fiosetown:
對於套介面和siocspgrp等效。
fiogetown:
對於套介面和siocgpgrp等效。
介面配置:
得到系統中所有介面由siocgifconf請求完成,該請求使用ifconf結構,ifconf又使用ifreq
結構,如下所示:
struct ifconf
int ifc_len;
// 緩衝區的大小
union
caddr_t ifcu_buf;
// input from user->kernel
struct ifreq *ifcu_req;
// return of structures returned
}ifc_ifcu;
#define ifc_buf ifc_ifcu.ifcu_buf
//buffer address
#define ifc_req ifc_ifcu.ifcu_req
//array of structures returned
#define ifnamsiz 16
struct ifreq
char ifr_name[ifnamsiz];
// inte***ce name, e.g., 「le0」
union
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
short ifru_flags;
int ifru_metric;
caddr_t ifru_data;
}ifr_ifru;
#define ifr_addr
ifr_ifru.ifru_addr
// address
#define ifr_dstaddr
ifr_ifru.ifru_dstaddr
// otner end of p-to-p link
#define ifr_broadaddr ifr_ifru.ifru_broadaddr
// broadcast address
#define ifr_flags
ifr_ifru.ifru_flags
// flags
#define ifr_metric
ifr_ifru.ifru_metric
// metric
#define ifr_data
ifr_ifru.ifru_data
// for use by inte***ce
再呼叫ioctl前我們必須先分撇乙個緩衝區和乙個ifconf結構,然後才初始化後者。如下圖
展示了乙個ifconf結構的初始化結構,其中緩衝區的大小為1024,ioctl的第三個引數指向
這樣乙個ifconf結構。
假設核心返回2個ifreq結構,ioctl返回時通過同乙個ifconf結構緩衝區填入了那2個ifreq結構,ifconf結構的ifc_len成員也被更新,以反映存放在緩衝區中的資訊量。
文章出處:飛諾網(www.firnow.com):
ioctl方法詳解
int ioctl struct inode struct file unsigned int,unsigned long 這是驅動程式裝置控制介面函式 ioctl函式 的核心原型定義,struct inode 和 struct file 描述了操作的檔案,unsigned int 描述了ioctl...
ioctl 函式詳解
int ioctl struct inode struct file unsigned int,unsigned long 這是驅動程式裝置控制介面函式 ioctl函式 的核心原型定義,struct inode 和 struct file 描述了操作的檔案,unsigned int 描述了ioctl...
ioctl引數命令設定
define scull ioc magic k define scull iocreset io scull ioc magic,0 define scull iocsquantum iow scull ioc magic,1,int define scull iocsqset iow scull...