UNIX網絡編程--ioctl操做(十七)

1、概述

         在本書中有兩個地方都對這個函數進行了介紹,其實還有不少地方須要這個函數。ioclt函數傳統上一直做爲納西而不適合納入其餘精細定義類別的特性的系統接口。網絡程序(特別是服務器程序)常常在程序啓動執行後使用ioctl獲取所在主機所有網絡接口的信心,包括:接口地址、是否支持廣播、是否支持多播。
緩存

2、ioctl函數     

 

#include <unistd.h>
int ioctl(int fd,int request,...../* void *arg  /);
//返回:若成功則爲0.失敗則我-1

        其中第三個參數老是一個指針,但指針的類型依賴於request參數。咱們能夠把和網絡相關的請求劃分爲6類:服務器

 

        1)套接字操做網絡

         2)文件操做異步

        3)接口操做函數

        4)ARP高速緩存操做指針

        5)路由表操做code

        6)流系統接口

        不但某些ioclt操做和某些fcntl操做功能重疊(譬如把套接字設置爲非阻塞),並且某些操做可使用ioctl以不止一種方式制定(譬如設置套接字的進程組屬主)。下表列出了網絡相關ioctl請求的request參數以及arg地址必須指向的數據類型。進程


3、套接字操做

         明確要求套接字ioctl請求有三個,它們都要求ioctl的第三個參數是指向某個整數的一個指針。路由

         1)SIOCATMARK   若是本套接字的讀指針當前位於帶外標記,那就經過由第三個參數指向的幀數放回一個非0值,不然返回一個0值。

         2)SIOCGPGRP    經過由第三個參數指向的整數返回本套接字的進程ID或進程組ID,該ID指定針對本套接字的SIGIO或SIGURG信號的接受進程。

         3)SIOCSPGR       本套接字的進程ID或進程組ID設置成由第三個參數指向的整數,該ID指定對本套接字的SIGIO或SIGURG信號的接受進程。

4、文件操做

          以FIO打頭的可能還適用於除套接字外某些特定類型的文件。都要求ioctl的第三個參數指向一個幀數。

          1)FIONBIO     根據ioctl的第三個參數指向一個0值或非0值,可消除或設置本套接字的非阻塞式I/O標誌。本請求和O_NONBLOCK文件狀態標誌等效,而能夠經過fcntlde F_SETFL命令清除或設置該標誌。

          2)FIOASYNC 根據ioctl的第三個參數指向一個0值或非0值,可消除或設置本套接字的信號驅動異步I/O標誌,它決定是否收取針對本套接字的異步I/O信號。本請求和O_ASYNC文件狀態標誌等效,而能夠經過fcntl的F_SETFL命令清除或設置該標誌

          3)FIONREAD   經過由ioctl的第三個參數指向的整數返回當前在本套接字接受緩衝區中的字節數。

         4) FIOSETOWN  對於本套接字和SIOCSPGRP等效

         5) FIOGETOWN  對於套接字和SIOCGPGRP等效。

5、接口配置

6、get_ifi_info函數

7、接口操做

8、arp高速緩存操做

9、路由表操做

相關文章
相關標籤/搜索