linux编程获取本机的所有网口名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux编程获取本机的所有网口名称相关的知识,希望对你有一定的参考价值。
怎样编程获取本机(linux系统)的所有网口名称?C语言程序。不是java。
参考技术A struct ifaddrsstruct ifaddrs *ifa_next; /* Next item in list */
char *ifa_name; /* Name of interface */
unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */
struct sockaddr *ifa_addr; /* Address of interface */
struct sockaddr *ifa_netmask; /* Netmask of interface */
union
struct sockaddr *ifu_broadaddr; /* Broadcast address of interface */
struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */
ifa_ifu;
#define ifa_broadaddr ifa_ifu.ifu_broadaddr
#define ifa_dstaddr ifa_ifu.ifu_dstaddr
void *ifa_data; /* Address-specific data */
;追问
我的交叉编译环境中,没有getifaddrs这个函数,也没有ifaddrs.h这个头文件。请问还有别的函数接口或者别的方法吗?
参考技术B ioctl函数追问能否详细点儿?这么一句还是完全不清楚啊。
追答#include
#include
#include //ifconf ifreq等结构体
#include
//获取网络接口信息
int getifc()
int inter_fd;
int if_len;
struct ifconf ifc;
struct ifreq buf[16];//接口信息
if ((inter_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
perror("socket(AF_INET, SOCK_DGRAM, 0)");
return -1;
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;
if (ioctl(inter_fd, SIOCGIFCONF, (char *) &ifc) == -1)
perror("SIOCGIFCONF ioctl");
return -1;
if_len = ifc.ifc_len / sizeof(struct ifreq);//接口数量
while (if_len-- > 0)
printf("接口:%s\n", buf[if_len].ifr_name);
return 0;
PS:有人给你一个方向,你应该朝着这个方向走;而不是等别人把你送到目的地。 共勉加油!
Linux修改本机名称
1、修改本机名称,一般用于生产环境能够方便区分服务器的用途,如果是自己测试,此步骤可做可不做。
# vi /etc/sysconfig/network打开配置文件,修改HOSTNAME=test
保存退出,然后再执行# hostname test,再注销重新登陆系统,就可以看到修改结果了
2、修改hosts文件,需要配置该本机名称对应的ip,不然安装会报错。
#vim /etc/hosts
以上是关于linux编程获取本机的所有网口名称的主要内容,如果未能解决你的问题,请参考以下文章
arm开发板上的linux如何通过网口和windows的网口通信,linux中的socket和windows下的socket能通用吗?