加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、獲取本機(jī)所有可用網(wǎng)卡名
    • 二、核心代碼如下:
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

簡簡單單教你如何用C語言列舉當(dāng)前所有網(wǎng)口!

2023/09/12
1651
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一、獲取本機(jī)所有可用網(wǎng)卡名

原理:

Linux 系統(tǒng)中,/proc 目錄是一個位于內(nèi)存中的偽文件系統(tǒng)。

/proc目錄是內(nèi)核提供給我們的查詢中心,通過查詢該目錄下的文件內(nèi)容,可以獲取到有關(guān)系統(tǒng)硬件及當(dāng)前運行進(jìn)程的信息,如 CPU 信息、負(fù)載信息、系統(tǒng)內(nèi)存信息、磁盤 IO 信息等。

其中文件:/proc/net/dev ,該文件是內(nèi)核維護(hù),所有可用的網(wǎng)口均會同步到該文件中。

/proc/net/dev

peng@ubuntu:~$?cat?/proc/net/dev
Inter-|???Receive????????????????????????????????????????????????|??Transmit
?face?|bytes????packets?errs?drop?fifo?frame?compressed?multicast|bytes????packets?errs?drop?fifo?colls?carrier?compressed
????lo:???26163?????292????0????0????0?????0??????????0?????????0????26163?????292????0????0????0?????0???????0??????????0
??eth0:?285444708??243273????0????0????0?????0??????????0?????????0?91828270???88660????0????0????0?????0???????0??????????0

所以我們要列舉出所有可用的網(wǎng)口名稱,可以通過查看改文件來實現(xiàn),

代碼原理講解

    list_interface_valid()

該函數(shù)用于列舉所有可用的網(wǎng)口

    • interface_name_cut (char *buf, char **name)

 

    • 該函數(shù)用于將從文件

/proc/net/dev

    中國讀取的每一行字符串信息,提取出網(wǎng)口名信息,如lo、eth0

代碼實現(xiàn)原理如下:

    函數(shù)strrchr()

該函數(shù)返回一個指針,指向字符串s中最后一個出現(xiàn)的字符c位置。

二、核心代碼如下:

#define?IP_SIZE?128

#define?PROCBUFSIZ??????????????????1024
#define?_PATH_PROC_NET_DEV????????"/proc/net/dev"
static?char?*?interface_name_cut?(char?*buf,?char?**name)
{
??char?*stat;
??/*?Skip?white?space.??Line?will?include?header?spaces.?*/
??while?(*buf?==?'?')
????buf++;
??*name?=?buf;
??/*?Cut?interface?name.?*/
??stat?=?strrchr?(buf,?':');
??*stat++?=?'';
??return?stat;
}

int?list_interface_valid()
{
??FILE?*fp;
??char?buf[PROCBUFSIZ];
??struct?interface?*ifp;
??char?*name;
??char?*p;
?
??/*?Open?/proc/net/dev.?*/
??fp?=?fopen?(_PATH_PROC_NET_DEV,?"r");
??if?(fp?==?NULL)
????{???
????????printf("open?proc?file?errorn");
??????return?-1;?
????}???
?
??/*?Drop?header?lines.?*/
??fgets?(buf,?PROCBUFSIZ,?fp);
??fgets?(buf,?PROCBUFSIZ,?fp);
?
??/*?Only?allocate?interface?structure.??Other?jobs?will?be?done?in
?????if_ioctl.c.?*/
??while?(fgets?(buf,?PROCBUFSIZ,?fp)?!=?NULL)
????{???
??????p?=?interface_name_cut?(buf,?&name);
???printf("port=%sn",name);
????}???
??fclose(fp);
??return?0;
}

運行截圖


完整代碼獲取,【一口Linux】公眾號后臺回復(fù):eth

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
LAN8710AI-EZK-TR 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, QCC32, 5 X 5 MM, 0.90 MM HEIGHT, ROHS COMPLIANT, QFN-32

ECAD模型

下載ECAD模型
$1.56 查看
TJA1040T/CM,118 1 NXP Semiconductors TJA1040 - High-speed CAN transceiver with standby mode SOIC 8-Pin

ECAD模型

下載ECAD模型
$2.24 查看
VOD217T 1 Vishay Intertechnologies VOD205T, VOD206T, VOD207T, VOD211T, VOD213T, VOD217T Optocoupler, Phototransistor Output, Dual Channel, SOIC-8 Package

ECAD模型

下載ECAD模型
$0.76 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

公眾號『一口Linux』號主彭老師,擁有15年嵌入式開發(fā)經(jīng)驗和培訓(xùn)經(jīng)驗。曾任職ZTE,某研究所,華清遠(yuǎn)見教學(xué)總監(jiān)。擁有多篇網(wǎng)絡(luò)協(xié)議相關(guān)專利和軟件著作。精通計算機(jī)網(wǎng)絡(luò)、Linux系統(tǒng)編程、ARM、Linux驅(qū)動、龍芯、物聯(lián)網(wǎng)。原創(chuàng)內(nèi)容基本從實際項目出發(fā),保持原理+實踐風(fēng)格,適合Linux驅(qū)動新手入門和技術(shù)進(jìn)階。