在NetBSD-1.0上使用ioctl获取接口配置清单的例子

《TVP/IP v2》的4.4节介绍了 ioctl 系统调用,所以想验证下实际调用的结果,代码例子如下:

 1 #include <sys/types.h>
 2 #include <sys/socket.h>
 3 #include <net/if.h>
 4 #include <net/if_dl.h>
 5 #include <netinet/in.h>
 6 #include <arpa/inet.h>
 7 #include <sys/ioctl.h>
 8 #include <stdlib.h>
 9
10 int printaddr( const struct sockaddr *sa )
11 {
12     if( sa->sa_family == AF_LINK ) {
13         struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa;
14         int len = sdl->sdl_alen - 1, i;
15
16         printf("\tAF_LINK\t");
17         for( i = 0; i < len; i++ ) {
18             printf("%02X:", (unsigned char)(sdl->sdl_data)[ sdl->sdl_nlen + i] );
19         }
20         printf( "%02X", (sdl->sdl_data)[ sdl->sdl_nlen + i] );
21     }
22     else if( sa->sa_family == AF_INET ) {
23         struct sockaddr_in *sin = (struct sockaddr_in *)sa;
24         printf("\tAF_INET\t");
25         printf("%s:%d", inet_ntoa(sin->sin_addr), ntohs(sin->sin_port));
26     }
27 }
28
29 int main(void)
30 {
31     struct ifconf ifc;
32     char buffer[200];
33     int len;
34     struct ifreq *ifrp;
35
36     len = socket(AF_INET, SOCK_STREAM, 0);
37
38     ifc.ifc_len = sizeof( buffer );
39     ifc.ifc_buf = buffer;
40     if( ioctl(len, SIOCGIFCONF, &ifc) < 0 )
41     {
42         perror("ioctl error");
43         return -1;
44     }
45
46     len = ifc.ifc_len;
47     ifrp = ifc.ifc_req;
48     for(; len > 0 && ifrp; ) {
49         struct sockaddr *sa = &(ifrp->ifr_addr);
50         printf("%s", ifrp->ifr_name);
51         printaddr( sa );
52         printf("\n");
53
54         ifrp = (struct ifreq *)((char *)sa + sa->sa_len);
55         len -= sizeof(ifrp->ifr_name) + sa->sa_len;
56     }
57
58     return 0;
59 }

在  NetBSD-1.0 上编译运行的结果为:

时间: 2024-08-10 23:27:51

在NetBSD-1.0上使用ioctl获取接口配置清单的例子的相关文章

FTP文件上传以及获取ftp配置帮助类

帮助类: using QSProjectBase; using Reform.CommonLib; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; namespace Reform.CommonLib { /// <summary> /// ftp操作 /// </summary> publ

在VMware 10.0上安装NetBSD 1.0

最近开始系统的学习计算机网络,买了被奉为经典中的经典<TCP/IP详解 卷2:实现>.不过这本书确实也有点过时了,讲解的是4.4BSD-Lite的代码,和当前BSD发布版的代码已经有很大差异了.根据在网络上搜索的结果,FreeBSD-2.0.NetBSD-1.0和BSD/OS 2.0都是基于4.4BSD-Lite的,但是BSD/OS在当时是商业版,现在也没有找到这个版本的源代码.FreeBSD的i386架构的源码,最接近的只有2.0.5版本的,2.0的不知道是没有,还是已经丢失了.比较了Fre

在CentOS7.0上制作openstack-juno本地yum源 .doc

在CentOS7.0上制作openstack-juno本地yum源 参考文献: 2014/09/27 |    http://www.kekeyun.net/?p=222可可云计算网 以http://www.kekeyun.net/?p=222文为参考,在CentOS7.0上制作本地源,过程如下:一.创建CentOS7虚拟主机安装过程有点漫长,为了后续学习的需要,建议下载样样全版来安装.样样全版本下载地址http://isoredirect.centos.org/centos/7/isos/x8

socket,ioctl获取ip

socket,ioctl获取ip 总结一下,今天学习的关于通过socket,ioctl来获得ip,netmask等信息,其中很多内容参照了很多网上的信息,我会一一列出的我用的这个函数,就是下面这个函数,其中的有一些全局变量,很好懂,也就不多做解释了 一.下面对这个函数进行注解一下: int get_nic_IP_Address() //获取各网卡IP地址.子网掩码 { struct ifreq ifreq;  //声明一个struct ifreq结构体(这个结构体中有很多重要的参数,具体可以参照

ioctl获取网络接口信息

linux下网络程序经常在启动执行后使用ioctl获取主机的全部网络接口信息, 例如接口地址.是否支持广播,是否支持多播等. 函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); 返回值:成功返回0,出错返回-1 常见选项 SIOCGIFCONF 获取所有接口的列表 SIOCGIFBRDADDR 获取广播地址 SIOCGIFMTU  获取mtu linux下使用ioctl操作网络接口,需要用到两个结构体 ifconf用来

图片上传时获取图片的宽和高

经常会遇到图片上传的问题,这时候我们会传图片的地址,宽和高到服务器,至于图片上传就不说了,这里主要说图片上传时获取图片的原始宽和高的问题. 一般而言,我们把图片上传至服务器时,服务器会返回一个上传地址给我们,这个就是我们图片的url了,但是光有这个还是不够的,因为还要将图片的宽和高传给服务器,这时候就可以这样做了.直接上代码: var img = new Image() img.src = url 然后就可以使用img.width和img.height来获取图片的宽和高了.当然仅仅这样做是不够的

基于BootStrap的initupload()实现Excel上传和获取excel中的数据

简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group"> <button class="btn sbold green" id="" onclick="initUpload('excelFile','/vraxx/rightAxx/upload');"> <span cl

DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

介绍 DynamicFusion构建了一个可以实时重建 非刚性变形 动态场景 的系统,随着新的数据融合进模型当中,模型得到降噪.细节更加精细. 论文地址:http://grail.cs.washington.edu/projects/dynamicfusion/papers/DynamicFusion.pdfGitHub地址:https://github.com/mihaibujanca/dynamicfusion注意:这个项目是对论文的复现,但是目前尚未准确复现论文内容,运行速度仍然有待优化,

[MFC] VS2013版本MFC工程移植到VC6.0上

:VS虽号称“宇宙最强IDE”,但是有时候安装包太大,动不动就几个G:而且安装好之后也会多出很多几乎很难用到的部分,这对于那些处女座的人如何忍受!本文不是吐槽,而是给出一种在应急场景下,不用安装新版本几个G的IDE,而是将高版本的工程移植到低版本的IDE中,并使其工作和调试的解决方法~ VS2013版本MFC工程移植到VC6.0上 1.场景再现 我最近搞了个ubuntu系统,并在virtualbox中装了个win7用于安装设计PCB和嵌入式集成开发环境Keil.项目需要,得用到我之前写的一个将图