• 正文
    • 一、獲取本機(jī)所有可用網(wǎng)卡名
    • 二、核心代碼如下:
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

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

2023/09/12
1264
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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

原理:

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

/proc目錄是內(nèi)核提供給我們的查詢中心,通過查詢該目錄下的文件內(nèi)容,可以獲取到有關(guān)系統(tǒng)硬件及當(dāng)前運(yùn)行進(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;
}

運(yùn)行截圖


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

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
NC7S14M5X 1 onsemi TinyLogic HS Inverter with Schmitt Trigger Input, 3000-REEL

ECAD模型

下載ECAD模型
$0.28 查看
PVG612S-TPBF 1 International Rectifier Transistor Output SSR, 1-Channel, 4000V Isolation, LEAD FREE, SURFACE MOUNT, DIP-6
$7.68 查看
74HC245D 1 Nexperia Bus Transceiver

ECAD模型

下載ECAD模型
$1.25 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

公眾號『一口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)階。