用C语言列出Linux或Unix上的网络适配器
上代码:
1. #include <sys/socket.h>
2. #include <stdio.h>
3.
4. #include <netdb.h>
5. #include <ifaddrs.h>
6.
7. int main() {
8. struct ifaddrs *addresses;
9. if(getifaddrs(&addresses) == -1) {
10. printf("getifaddrs failed");
11. return -1;
12. }
13. struct ifaddrs *address = addresses;
14. while(address){
15. int family = address->ifa_addr->sa_family;
16. if(family == AF_INET || family == AF_INET6){
17. printf("%s\t",address->ifa_name);
18. printf("%s\t",family == AF_INET ? "IPv4":"IPv6");
19. char ap[100];
20. const int family_size = family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
21. getnameinfo(address->ifa_addr, family_size, ap,sizeof(ap),0,0,NI_NUMERICHOST);
22. printf("\t%s\n",ap);
23. }
24. address = address->ifa_next;
25. }
26. freeifaddrs(addresses);
27. return 0;
28. }
代码解释:
-
sys/socket.h 定义主要socket的操作和结构体,如sockaddr_in、AF_INET(IPv4地址族)、AF_INET6(IPv6地址族)等。
-
stdio.h 提供了通用文件操作的支持和窄字符输入输出的能力,如printf等。
-
netdb.h 这里包含许多对网络操作的定义 ,如addrinfo结构体,这里面有AI_NUMERICHOST,这是说返回数字主机地址作为名字等等。
-
ifaddrs.h 定义ifaddrs结构体和函数 getifaddrs, freeifaddrs。
-
第8行:声明了 ifaddrs结构体指针,这个结构体:
struct ifaddrs {//因为ifaddrs是一个链表的数据结构,所以ifa_next是指向下一个节点的指针struct ifaddrs *ifa_next; char *ifa_name; // 接口名称unsigned int ifa_flags; // SIOCGIFFLAGS的标记,这是与设备io相关的控制标志struct sockaddr *ifa_addr; //接口地址struct sockaddr *ifa_netmask; //接口网络掩码union { // 联合体struct sockaddr *ifu_broadaddr; // 接口广播地址struct sockaddr *ifu_dstaddr; //点到点目的地址} ifa_ifu;#define ifa_broadaddr ifa_ifu.ifu_broadaddr#define ifa_dstaddr ifa_ifu.ifu_dstaddrvoid *ifa_data; //地址特定数据};
- 第9行,getifaddrs函数取回网络适配器数据,这些数据是一个链表,所以将头指针赋给addresses指针变量
- 第13行,struct ifaddrs *address = addresses; 将取回到指针地址赋给另外一个指针变量address,这样通过新指针address变量来遍历所有的数据,而不改变指针addresses的值。
- 第15行,int family = address->ifa_addr->sa_family;取回接口地址的地址族。简单来说就是看它是IPv4还是IPv6 。
- 第21行,getnameinfo函数取回名称
- 第26行,freeifaddrs(addresses);用于释放指针
运行的结果大概是这样的:

相关文章:
用C语言列出Linux或Unix上的网络适配器
上代码: 1. #include <sys/socket.h> 2. #include <stdio.h> 3. 4. #include <netdb.h> 5. #include <ifaddrs.h> 6. 7. int main() { 8. struct ifaddrs *addresses; 9. if(getifaddrs(&addresses) -1) { 10. printf("…...
单片机学习笔记---LED点阵屏显示图形动画
目录 LED点阵屏显示图形 LED点阵屏显示动画 最后补充 上一节我们讲了点阵屏的工作原理,这节开始代码演示! 前面我们已经说了74HC595模块也提供了8个LED,当我们不使用点阵屏的时候也可以单独使用74HC595,这8个LED可以用来测试7…...
Git分支常用指令
目录 1 git branch 2 git branch xx 3 git checkout xx 4 git checkout -b xx 5 git branch -d xx 6 git branch -D xx 7 git merge xx(含快进模式和冲突解决的讲解) 注意git-log: 1 git branch 作用:查看分支 示例: 2 git branch xx 作用&a…...
3.3 Binance_interface APP U本位合约行情-实时行情
Binance_interface APP U本位合约行情-实时行情 Github地址PyTed量化交易研究院 量化交易研究群(VX) py_ted目录 Binance_interface APP U本位合约行情-实时行情1. APP U本位合约行情-实时行情函数总览2. 模型实例化3. 获取一个产品的最优挂单 get_bookTicker4. 获取全部产品…...
机器学习——流形学习
流形学习是一种在机器学习领域中用于理解和分析数据的技术。它的核心思想是,尽管我们通常将数据表示为高维空间中的向量,但实际上数据可能具有较低维度的内在结构,这种结构被称为流形。流形学习的目标是发现并利用数据的这种潜在结构…...
离线数仓(一)【数仓概念、需求架构】
前言 今天开始学习数仓的内容,之前花费一年半的时间已经学完了 Hadoop、Hive、Zookeeper、Spark、HBase、Flume、Sqoop、Kafka、Flink 等基础组件。把学过的内容用到实践这是最重要的,相信会有很大的收获。 1、数据仓库概念 1.1、概念 数据仓库&#x…...
物联网测试:2024 年的最佳实践和挑战
据 Transforma Insights 称,到 2030 年,全球广泛使用的物联网 (IoT) 设备预计将增加近一倍,从 151 亿台增至 290 亿台。这些设备以及智能汽车、智能手机等广泛应用于各种官僚机构。 健康视频监视器、闹钟以及咖啡机和冰箱等最受欢迎的家用电器…...
蓝桥杯Web应用开发-CSS3 新特性
CSS3 新特性 专栏持续更新中 在前面我们已经学习了元素选择器、id 选择器和类选择器,我们可以通过标签名、id 名、类名给指定元素设置样式。 现在我们继续选择器之旅,学习 CSS3 中新增的三类选择器,分别是: • 属性选择器 • 子…...
MongoDB聚合:$unionWith
$unionWith聚合阶段执行两个集合的合并,将两个集合的管道结果合并到一个结果集传送到下一个阶段。合并后的结果文档的顺序是不确定的。 语法 { $unionWith: { coll: "<collection>", pipeline: [ <stage1>, ... ] } }要包含集合的所有文档不…...
人工智能三子棋-人机对弈-人人对弈,谁会是最终赢家?
✅作者简介:大家好我是原始豌豆,感谢支持。 🆔本文由 原始豌豆 原创 CSDN首发🐒 如需转载还请通知⚠ 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:C语言项目实践…...
【leetcode热题100】反转链表 II
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head [1,2,3,4,5], left 2, right 4 输出:[1,4,3,2…...
谷歌 DeepMind 联合斯坦福推出了主从式遥操作双臂机器人系统增强版ALOHA 2
谷歌 DeepMind 联合斯坦福推出了 ALOHA 的增强版本 ——ALOHA 2。与一代相比,ALOHA 2 具有更强的性能、人体工程学设计和稳健性,且成本还不到 20 万元人民币。并且,为了加速大规模双手操作的研究,ALOHA 2 相关的所有硬件设计全部开…...
金融行业专题|证券超融合架构转型与场景探索合集(2023版)
更新内容 更新 SmartX 超融合在证券行业的覆盖范围、部署规模与应用场景。新增操作系统信创转型、Nutanix 国产化替代、网络与安全等场景实践。更多超融合金融核心生产业务场景实践,欢迎阅读文末电子书。 在金融行业如火如荼的数字化转型大潮中,传统架…...
【C语言】C的整理记录
前言 该笔记是建立在已经系统学习过C语言的基础上,笔者对C语言的知识和注意事项进行整理记录,便于后期查阅,反复琢磨。C语言是一种面向过程的编程语言。 原想在此阐述一下C语言的作用,然而发觉这些是编程语言所共通的作用&#…...
C/C++模板初阶
目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通用的交换函数呢? void Swap(int&…...
linux系统下vscode portable版本的c++/Cmake环境搭建001
linux系统下vscode portable版本的Cmake环境搭建 vscode portable 安装安装基本工具安装 build-essential安装 CMake final script code安装插件CMake Tools & cmakeC/C Extension Pack Testsettings,jsonCMakeLists.txt调试和运行工具 CG 目的:希望在获得一个新…...
【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…...
2024年 前端JavaScript入门到精通 第一天
主要讲解JavaScript核心知识,包含最新ES6语法,从基础到API再到高级。让你一边学习一边练习,重点知识及时实践,同时每天安排大量作业,加深记忆,巩固学习成果。 1.1 基本软件与准备工作 1.2 JavaScript 案例 …...
155基于matlab 的形态学权重自适应图像去噪
基于matlab 的形态学权重自适应图像去噪;通过串并联的滤波降噪对比图,说明并联降噪的优越性。输出降噪前后图像和不同方法的降噪情况的信噪比。程序已调通,可直接运行。 155matlab 自适应图像降噪 串并联降噪 (xiaohongshu.com)...
从零开始将个人小项目的大模型API切换至Taotoken的过程与感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从零开始将个人小项目的大模型API切换至Taotoken的过程与感受 1. 迁移前的项目状态与动机 我维护着一个用于内容摘要和分类的个人…...
为OpenClaw智能体工作流配置Taotoken作为模型供应商的步骤
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw智能体工作流配置Taotoken作为模型供应商的步骤 1. 准备工作:获取必要的凭证与信息 在开始配置之前&#x…...
别再让角色‘走猫步’:深入浅出图解‘拉绳算法’,5步实现游戏平滑寻路
别再让角色‘走猫步’:深入浅出图解‘拉绳算法’,5步实现游戏平滑寻路 你是否曾在游戏中见过角色沿着路径移动时,像模特走猫步一样左右摇摆?这种不自然的运动不仅影响视觉体验,还可能暴露游戏AI的粗糙。本文将用最直观…...
ROS导航避坑指南:搞清rviz里‘2D Pose Estimate’和‘2D Nav Goal’的区别与正确使用姿势
ROS导航避坑指南:rviz中‘2D Pose Estimate’与‘2D Nav Goal’的深度解析与实践技巧 在机器人操作系统(ROS)的导航栈开发中,rviz作为可视化调试的核心工具,其2D Pose Estimate和2D Nav Goal两个功能按钮看似简单&…...
大模型推理引擎概述
“推理引擎”(Inference Engine)是人工智能系统中专门负责运行(执行)已训练好的模型,对新输入数据进行预测或生成结果的软件组件。 你可以把它理解为: “模型的发动机”——训练好的模型是“设计图纸”&am…...
Python异步编程与Discord机器人开发:pincer库实战指南
1. 项目概述与核心价值最近在折腾一个游戏服务器的后端,发现处理实时通信和状态同步这块儿,用传统的HTTP轮询或者WebSocket裸写,代码很快就变得又臭又长,维护起来简直是噩梦。就在我头疼的时候,社区里一个叫pincer的项…...
Hitboxer终极指南:专业级游戏键盘重映射与SOCD清理工具完全教程
Hitboxer终极指南:专业级游戏键盘重映射与SOCD清理工具完全教程 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd Hitboxer是一款专为竞技游戏玩家设计的专业级键盘按键重映射和SOCD清理工具ÿ…...
Wand-Enhancer:零成本解锁WeMod高级功能的完整指南
Wand-Enhancer:零成本解锁WeMod高级功能的完整指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的订阅费用而犹豫不决吗…...
Thorium浏览器深度解析:5个核心优势与进阶配置实战
Thorium浏览器深度解析:5个核心优势与进阶配置实战 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of the RE…...
基于Fire2012算法与FastLED库的Arduino LED篝火制作全攻略
1. 项目概述:用代码点燃一场永不熄灭的数字篝火夏夜、星空、朋友围坐,篝火带来的温暖与氛围是露营的灵魂。但现实是,很多营地禁止明火,或者在城市阳台、室内空间,生一堆真正的火既不安全也不现实。作为一名玩了十多年A…...
