亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1558 | 回復: 0
打印 上一主題 下一主題

ioctl參數(shù)詳解 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-08-17 22:31 |只看該作者 |倒序瀏覽
本函數(shù)影響由fd參數(shù)引用的一個打開的文件。
#include
int ioctl( int fd, int request, .../* void *arg */ );
返回0:成功    -1:出錯
第三個參數(shù)總是一個指針,但指針的類型依賴于request參數(shù)。
我們可以把和網絡相關的請求劃分為6類:
套接口操作  文件操作   接口操作   ARP高速緩存操作    路由表操作    流系統(tǒng)
下表列出了網絡相關ioctl請求的request參數(shù)以及arg地址必須指向的數(shù)據類型:
類別
Request
說明
數(shù)據類型



SIOCATMARK
SIOCSPGRP
SIOCGPGRP
是否位于帶外標記
設置套接口的進程ID或進程組ID
獲取套接口的進程ID或進程組ID
int
int
int




FIONBIN
FIOASYNC
FIONREAD
FIOSETOWN
FIOGETOWN
設置/清除非阻塞I/O標志
設置/清除信號驅動異步I/O標志
獲取接收緩存區(qū)中的字節(jié)數(shù)
設置文件的進程ID或進程組ID
獲取文件的進程ID或進程組ID
int
int
int
int
int










SIOCGIFCONF
SIOCSIFADDR
SIOCGIFADDR
SIOCSIFFLAGS
SIOCGIFFLAGS
SIOCSIFDSTADDR
SIOCGIFDSTADDR
SIOCGIFBRDADDR
SIOCSIFBRDADDR
SIOCGIFNETMASK
SIOCSIFNETMASK
SIOCGIFMETRIC
SIOCSIFMETRIC
SIOCGIFMTU
SIOCxxx
獲取所有接口的清單
設置接口地址
獲取接口地址
設置接口標志
獲取接口標志
設置點到點地址
獲取點到點地址
獲取廣播地址
設置廣播地址
獲取子網掩碼
設置子網掩碼
獲取接口的測度
設置接口的測度
獲取接口MTU
(還有很多取決于系統(tǒng)的實現(xiàn))
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

ARP
SIOCSARP
SIOCGARP
SIOCDARP
創(chuàng)建/修改ARP表項
獲取ARP表項
刪除ARP表項
struct arpreq
struct arpreq
struct arpreq


SIOCADDRT
SIOCDELRT
增加路徑
刪除路徑
struct rtentry
struct rtentry

I_xxx




套接口操作:
明確用于套接口操作的ioctl請求有三個,它們都要求ioctl的第三個參數(shù)是指向某個整數(shù)的一個指針。

SIOCATMARK:    如果本套接口的的度指針當前位于帶外標記,那就通過由第三個參數(shù)指向的整數(shù)返回一個非0值;否則返回一個0值。POSIX以函數(shù)sockatmark替換本請求。
SIOCGPGRP:       通過第三個參數(shù)指向的整數(shù)返回本套接口的進程ID或進程組ID,該ID指定針對本套接口的SIGIO或SIGURG信號的接收進程。本請求和fcntl的F_GETOWN命令等效,POSIX標準化的是fcntl函數(shù)。
SIOCSPGRP:     把本套接口的進程ID或者進程組ID設置成第三個參數(shù)指向的整數(shù),該ID指定針對本套接口的SIGIO或SIGURG信號的接收進程,本請求和fcntl的F_SETOWN命令等效,POSIX標準化的是fcntl操作。
文件操作:
以下5個請求都要求ioctl的第三個參數(shù)指向一個整數(shù)。
FIONBIO:        根據ioctl的第三個參數(shù)指向一個0或非0值分別清除或設置本套接口的非阻塞標志。本請求和O_NONBLOCK文件狀態(tài)標志等效,而該標志通過fcntl的F_SETFL命令清除或設置。
FIOASYNC:      根據iocl的第三個參數(shù)指向一個0值或非0值分別清除或設置針對本套接口的信號驅動異步I/O標志,它決定是否收取針對本套接口的異步I/O信號(SIGIO)。本請求和O_ASYNC文件狀態(tài)標志等效,而該標志可以通過fcntl的F_SETFL命令清除或設置。
FIONREAD:     通過由ioctl的第三個參數(shù)指向的整數(shù)返回當前在本套接口接收緩沖區(qū)中的字節(jié)數(shù)。本特性同樣適用于文件,管道和終端。
FIOSETOWN:    對于套接口和SIOCSPGRP等效。
FIOGETOWN:    對于套接口和SIOCGPGRP等效。
接口配置:
得到系統(tǒng)中所有接口由SIOCGIFCONF請求完成,該請求使用ifconf結構,ifconf又使用ifreq
結構,如下所示:
Struct ifconf
{
    int ifc_len;                 // 緩沖區(qū)的大小
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];           // interface name, e.g., “l(fā)e0”
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 interface

再調用ioctl前我們必須先分撇一個緩沖區(qū)和一個ifconf結構,然后才初始化后者。如下圖
展示了一個ifconf結構的初始化結構,其中緩沖區(qū)的大小為1024,ioctl的第三個參數(shù)指向
這樣一個ifconf結構。
假設內核返回2個ifreq結構,ioctl返回時通過同一個ifconf結構緩沖區(qū)填入了那2個ifreq結構,ifconf結構的ifc_len成員也被更新,以反映存放在緩沖區(qū)中的信息量。



本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/95416/showart_2030214.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP