ioctl和structifreq

ioctl和structifreq

ID:38189914

大小:45.50 KB

页数:3页

时间:2019-05-24

ioctl和structifreq_第1页
ioctl和structifreq_第2页
ioctl和structifreq_第3页
资源描述:

《ioctl和structifreq》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考.首先先认识一下ifconf和ifreq://ifconf通常是用来保存所有接口信息的//if.hstruct ifconf{int ifc_len; /*sizeofbuffer*/union{char *ifcu_buf; /*inputfromuser->kernel*/struct ifreq*i

2、fcu_req; /*returnfromkernel->user*/}ifc_ifcu;};#define ifc_bufifc_ifcu.ifcu_buf /*bufferaddress*/#define ifc_reqifc_ifcu.ifcu_req /*arrayofstructures*/ //ifreq用来保存某个接口的信息//if.hstruct ifreq {char ifr_name[IFNAMSIZ];union{struct sockaddrifru_addr;struct sockaddrifr

3、u_dstaddr;struct sockaddrifru_broadaddr;short ifru_flags;int ifru_metric;caddr_tifru_data;}ifr_ifru;};#define ifr_addrifr_ifru.ifru_addr#define ifr_dstaddrifr_ifru.ifru_dstaddr#define ifr_broadaddrifr_ifru.ifru_broadaddr 上边这两个结构看起来比较复杂,我们现在把它们简单化一些:比如说现在我们向实现获得本地

4、IP的功能。我们的做法是:1.先通过ioctl获得本地所有接口的信息,并保存在ifconf中2.再从ifconf中取出每一个ifreq中表示ip地址的信息具体使用时我们可以认为ifconf就有两个成员:ifc_len和ifc_buf, 如图一所示:     ifc_len:表示用来存放所有接口信息的缓冲区长度ifc_buf:表示存放接口信息的缓冲区所以我们需要在程序开始时对ifconf的ifc_len和ifc_buf进行初始化 接下来使用ioctl获取所有接口信息,完成后ifc_len内存放实际获得的借口信息总长度并且信

5、息被存放在ifc_buf中。 如下图示:(假设读到两个接口信息)  接下来我们只需要从一个一个的接口信息获取ip地址信息即可。下面有一个简单的参考:#include#include#include#include#include in .h>#include#include if .h>#include int main(){int i=0;int sockfd;struct ifconfifconf;unsigned char buf[512];struct ifreq*ifreq;//初始化if

6、confifconf.ifc_len=512;ifconf.ifc_buf=buf;if ((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0){perror("socket" );exit(1);}ioctl(sockfd,SIOCGIFCONF,&ifconf); //获取所有接口信息//接下来一个一个的获取IP地址ifreq=(struct ifreq*)buf;for (i=(ifconf.ifc_len/sizeof (struct ifreq));i>0;i--){//if(ifr

7、eq->ifr_flags==AF_INET){//foripv4printf("name=[%s]/n" ,ifreq->ifr_name);printf("localaddr=[%s]/n" ,inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));ifreq++;//}}return 0;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。