龙空技术网

简简单单教你如何用C语言实现获取当前所有可用网口!

一口Linux 478

前言:

目前咱们对“ubuntu 网口配置”大体比较关怀,兄弟们都想要知道一些“ubuntu 网口配置”的相关资讯。那么小编同时在网络上收集了一些对于“ubuntu 网口配置””的相关资讯,希望各位老铁们能喜欢,小伙伴们一起来学习一下吧!

一、获取本机所有可用网卡名原理:

在 Linux 系统中,/proc 目录是一个位于内存中的伪文件系统。

/proc目录是内核提供给我们的查询中心,通过查询该目录下的文件内容,可以获取到有关系统硬件及当前运行进程的信息,如 CPU 信息、负载信息、系统内存信息、磁盘 IO 信息等。

其中文件:/proc/net/dev ,该文件是内核维护,所有可用的网口均会同步到该文件中。

/proc/net/dev

peng@ubuntu:~$ cat /proc/net/devInter-|   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

所以我们要列举出所有可用的网口名称,可以通过查看改文件来实现,

代码原理讲解list_interface_valid()

该函数用于列举所有可用的网口

interface_name_cut (char *buf, char **name) 该函数用于将从文件/proc/net/dev中国读取的每一行字符串信息,提取出网口名信息,如lo、eth0

代码实现原理如下:

函数strrchr()

该函数返回一个指针,指向字符串s中最后一个出现的字符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++ = '\0';  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 error\n");      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=%s\n",name);    }     fclose(fp);  return 0;}
运行截图

完整代码获取,公众号后台回复:eth

标签: #ubuntu 网口配置 #c语言读取一整行