資源描述:
《Linux內(nèi)核的ioctl函數(shù)學(xué)習(xí)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、本函數(shù)影響由fd參數(shù)引用的一個打開的文件。#include#includeintioctl(intfd,intrequest,.../*void*arg*/);返回0:成功-1:出錯第三個參數(shù)總是一個指針,但指針的類型依賴于request參數(shù)。我們可以把和網(wǎng)絡(luò)相關(guān)的請求劃分為6類:套接口操作文件操作接口操作ARP高速緩存操作路由表操作流系統(tǒng)下表列出了網(wǎng)絡(luò)相關(guān)ioctl請求的request參數(shù)以及arg地址必須指向的數(shù)據(jù)類型:類別Request說明數(shù)據(jù)類型套接SIOCATMARKSIOCSP
2、GRPSI是否位于帶外標(biāo)記設(shè)置套接口intintint口OCGPGRP的進(jìn)程ID或進(jìn)程組ID獲取套接口的進(jìn)程ID或進(jìn)程組ID文FIONBINFIOASYNCFIONRE設(shè)置/清除非阻塞I/O標(biāo)志設(shè)置/清intintintintint件ADFIOSETOWNFIOGETOWN除信號驅(qū)動異步I/O標(biāo)志獲取接收緩存區(qū)中的字節(jié)數(shù)設(shè)置文件的進(jìn)程ID或進(jìn)程組ID獲取文件的進(jìn)程ID或進(jìn)程組IDSIOCGIFCONFSIOCSIFADD獲取所有接口的清單設(shè)置接口structifconfstruct接口RSIOCGIFADDRSIOCSIFFL地址獲取
3、接口地址設(shè)置接口標(biāo)ifreqstructAGSSIOCGIFFLAGSSIOCSI志獲取接口標(biāo)志設(shè)置點到點地ifreqstructFDSTADDRSIOCGIFDSTADD址獲取點到點地址獲取廣播地ifreqstructRSIOCGIFBRDADDRSIOCSI址設(shè)置廣播地址獲取子網(wǎng)掩碼ifreqstructFBRDADDRSIOCGIFNETMAS設(shè)置子網(wǎng)掩碼獲取接口的測度ifreqstructKSIOCSIFNETMASKSIOCGI設(shè)置接口的測度獲取接口MTUifreqstructFMETRICSIOCSIFMETRICS(還有
4、很多取決于系統(tǒng)的實ifreqstructIOCGIFMTUSIOCxxx現(xiàn))ifreqstructifreqstructifreqstructifreqstructifreqstructifreqARPSIOCSARPSIOCGARPSIOCD創(chuàng)建/修改ARP表項獲取ARP表項structarpreqstructARP刪除ARP表項arpreqstructarpreq路由SIOCADDRTSIOCDELRT增加路徑刪除路徑structrtentrystructrtentry流I_xxx套接口操作:明確用于套接口操作的ioctl請求有三
5、個,它們都要求ioctl的第三個參數(shù)是指向某個整數(shù)的一個指針。SIOCATMARK:如果本套接口的的度指針當(dāng)前位于帶外標(biāo)記,那就通過由第三個參數(shù)指向的整數(shù)返回一個非0值;否則返回一個0值。POSIX以函數(shù)sockatmark替換本請求。SIOCGPGRP:通過第三個參數(shù)指向的整數(shù)返回本套接口的進(jìn)程ID或進(jìn)程組ID,該ID指定針對本套接口的SIGIO或SIGURG信號的接收進(jìn)程。本請求和fcntl的F_GETOWN命令等效,POSIX標(biāo)準(zhǔn)化的是fcntl函數(shù)。SIOCSPGRP:把本套接口的進(jìn)程ID或者進(jìn)程組ID設(shè)置成第三個參數(shù)指向的整
6、數(shù),該ID指定針對本套接口的SIGIO或SIGURG信號的接收進(jìn)程,本請求和fcntl的F_SETOWN命令等效,POSIX標(biāo)準(zhǔn)化的是fcntl操作。文件操作:以下5個請求都要求ioctl的第三個參數(shù)指向一個整數(shù)。FIONBIO:根據(jù)ioctl的第三個參數(shù)指向一個0或非0值分別清除或設(shè)置本套接口的非阻塞標(biāo)志。本請求和O_NONBLOCK文件狀態(tài)標(biāo)志等效,而該標(biāo)志通過fcntl的F_SETFL命令清除或設(shè)置。FIOASYNC:根據(jù)iocl的第三個參數(shù)指向一個0值或非0值分別清除或設(shè)置針對本套接口的信號驅(qū)動異步I/O標(biāo)志,它決定是否收取針
7、對本套接口的異步I/O信號(SIGIO)。本請求和O_ASYNC文件狀態(tài)標(biāo)志等效,而該標(biāo)志可以通過fcntl的F_SETFL命令清除或設(shè)置。FIONREAD:通過由ioctl的第三個參數(shù)指向的整數(shù)返回當(dāng)前在本套接口接收緩沖區(qū)中的字節(jié)數(shù)。本特性同樣適用于文件,管道和終端。FIOSETOWN:對于套接口和SIOCSPGRP等效。FIOGETOWN:對于套接口和SIOCGPGRP等效。接口配置:得到系統(tǒng)中所有接口由SIOCGIFCONF請求完成,該請求使用ifconf結(jié)構(gòu),ifconf又使用ifreq結(jié)構(gòu),如下所示:Structifconf
8、{intifc_len;//緩沖區(qū)的大小union{caddr_tifcu_buf;//inputfromuser->kernelstructifreq*ifcu_req;//returnofstructuresretu