Re: [問題] 請問應用程式如何取得網路裝置

看板LinuxDev作者時間17年前 (2007/10/20 14:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
※ 引述《origo (補習班版在哪兒啊,告訴我)》之銘言: : ※ 引述《ILYUJING (蟹)》之銘言: : : 我想在user-space下利用ioctl取得網路裝置的資訊 : : ioctl的系統呼叫如下: : : int ioctl( int fd, int cmd, ...); : : 關於fd我應該怎麼取得? : : 我的意思是我怎麼在應用程式下開啟網路裝置? : : 以及我需要include哪些lib? : : #include<stdio.h> : : ? : : int main() { : : int fd = ? : : struct ifreq data; : : .... : : ioctl(fd,cmd,&data); : : return 0; : : } : : → prudent:網路的fd,不就是用 socket 函式嗎! 是指這個嗎? 10/18 23:36 : 據我的了解和看過的寫法, : fd的部分,只要隨便contruct的一個就行啦, : 不管是TCP, UDP,RAW都可以, : 重點是在 struct ifreq data中你要指定查詢interface的名稱, : 例如 : eth0, : 再利用cmd去指定要查詢的項目就可以啦. : 例如 : SIOCGIFNETMASK, SIOCGIFADDR. : X 很感謝origo和各位板友的資訊 我依照origo的方式查詢了struct ifreq的結構型態 (可參考../include/linux/if.h..表示核心原始碼程式的目錄) 並將interface的名稱(假設是eth3)傳給ifreq的資料成員(data member), 如下: strncpy(data.ifr_name, "eth3", 6); 然後使用系統呼叫ioctl(): ioctl(sockfd,MyDefIOCTL,&data); 確實可觸發我所撰寫的網路驅動程式中之do_ioctl() 不過這裡我有一個疑問是, 關於ioctl()中的cmd的編號部分, 大家是直接去try數值, 還是利用系統提供的一些巨集? 目前我是直接丟核心中可能沒用到的數值, 稍後我會參考歐萊里出版社出的那ㄧ本liinux device driver中的第六章, 利用一些巨集來取得cmd編號 由於char device driver的ioctl()和network device driver的do_ioctl()之prototype不一樣 所以我對於兩種驅動程式是否會分享cmd編號感到疑惑 不知道其他人是否有這方面的經驗可分享? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.183.77 ※ 編輯: ILYUJING 來自: 140.124.183.77 (10/20 14:37)
文章代碼(AID): #176Q2IUn (LinuxDev)
文章代碼(AID): #176Q2IUn (LinuxDev)