struct ifconf和struct ifreq

ifreq用来保存某个接口的信息,ifconf用来保存所有接口信息。

以下为获取本地网卡名,仿ifconfig功能:
1. 先通过ioctl获得本地所有接口的信息,并保存在ifconf中
2. 再从ifconf中取出每一个ifreq中表示ip地址的信息
3. ifconf的两个成员初始化
ifc_len:表示用来存放所有接口信息的缓冲区长度
ifc_buf:表示存放接口信息的缓冲区
需要在程序开始时对ifconf的ifc_len和ifc_buf进行初始化 
接下来使用ioctl获取所有接口信息,完成后ifc_len内存放实际获得的接口信息总长度
并且信息被存放在ifc_buf中。

 

示例:

int ifconfig() 
{
	struct sockaddr_in sin; 
	char buff[512] = {0};
	struct ifconf ifc;
	ifc.ifc_len = 512;
	ifc.ifc_buf = buff;

	int sock_fd = socket(AF_INET, SOCK_DGRAM, 0); 
	if(sock_fd >= 0)
	{
		/*获取所有接口清单*/
		if (ioctl(sock_fd, SIOCGIFCONF, &ifc) < 0)
		{
			common_printf("SIOCGIFCONF failed: %s", strerror(errno));
			return -1;
		}

		/*计算获得的接口个数*/
		int count = ifc.ifc_len / sizeof(struct ifreq);

		struct ifreq *ifr = (struct ifreq *)buff;
		for(int i = 0; i<count; i++)
		{
			common_printf("%d interface name: %s", i, ifr[i].ifr_name);
		}
	}
	close(sock_fd);

	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值