Linux网络编程- ioctl()结合struct ifreq使用案例

news/2025/3/27 10:16:32/

当我们使用 ioctl() 函数和 SIOCGIFFLAGS 请求码来获取网络接口的标志时,我们需要提供一个 struct ifreq 结构体作为参数。这个结构体包含了网络接口的名称和一个将被填充的字段,该字段将在调用返回时包含所请求的标志。

struct ifreq

该结构体的定义如下:

struct ifreq {char ifr_name[IFNAMSIZ];   // Interface nameunion {struct sockaddr ifr_addr;// ... other members ...short ifr_flags;  // Flags// ... other members ...};
};

这只是 struct ifreq 的简化版本,它在 <net/if.h> 中定义。

如何使用 ioctl()SIOCGIFFLAGS

  1. 创建一个 struct ifreq 实例。
  2. 设置 ifr_name 字段为我们想查询的接口名称,例如 “eth0”。
  3. 调用 ioctl(),将 SIOCGIFFLAGS 作为请求码和我们的 struct ifreq 实例作为参数。
  4. 当调用返回时,ifr_flags 字段将被填充为该接口的标志。

示例:

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <unistd.h>int main() {int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) {perror("socket");return 1;}struct ifreq ifr;memset(&ifr, 0, sizeof(ifr));strncpy(ifr.ifr_name, "enp5s0", IFNAMSIZ - 1); // Assuming 'enp5s0' as the interfaceif (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0) {perror("ioctl");close(sockfd);return 1;}close(sockfd);printf("Flags for 'enp5s0': 0x%x\n", ifr.ifr_flags);return 0;
}
majn@tiger:~/C_Project/network_project$ ./ioctl_demo 
Flags for 'enp5s0': 0x1143

在上述示例中,我们首先创建了一个用于 ioctl() 调用的临时套接字。然后,我们设置了 ifr_name 为 “enp5s0”,这表示我们想查询这个接口的标志。调用 ioctl() 之后,ifr_flags 将包含 “enp5s0” 接口的标志。


http://www.ppmy.cn/news/1127199.html

相关文章

100GBASE-DR光模块:高速数据中心互连的全新选择

100GBASE-DR光模块相较于传统的100G QSFP28光模块采用的是PAM4调制&#xff0c;单波长传输数据率更高&#xff0c;具有低功耗、高密度、高可靠性等优点&#xff0c;更适用于高速数据中心互连方案部署。本文将从100G QSFP28 DR光模块的概念界定、日常运行流程及其场景方案等角度…

为什么说软文能够扩大中小企业的品牌影响力?

在当今的商业环境中&#xff0c;品牌影响力对于企业的成功至关重要。对于中小企业来说&#xff0c;利用软文来打造品牌影响力是一种成本低且效果更高的方式。为什么说软文能够扩大中小企业的品牌影响力呢&#xff1f;下面就让媒介盒子告诉你。 一、塑造品牌形象 首先&#xff…

S11-斜线表头操作

如何操作 1、选中左上角 2、Ctrl1 打开单元格格式设置 3、选中边框操作 4、如图 5、最终效果展示

D. A Simple Task

Problem - D - Codeforces 思路&#xff1a;这个题就是求环的数量&#xff0c;通过数据范围的大小&#xff0c;我们可以想到用状压dp来做&#xff0c;因为只有19个点&#xff0c;我们可以将环的路径进行状态压缩&#xff0c;用一个二进制数表示环&#xff0c;当某一位为1时表示…

Vue3最佳实践 第五章 Vue 组件应用 5 (Vue 插件)

想了解Vue插件所以你看了官方文档却看不懂&#xff0c;或者你想知道Vue.use()方法和插件的关系。在本文档中&#xff0c;我们将参照文档讲解插件制作的基础知识&#xff0c;了解基础知识后&#xff0c;我们将制作与更实用的下拉菜单和脚本加载相关的插件。读完之后&#xff0c;…

基于springboot高校场馆预订系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

PHP 变动:PHP 8 版本下字符串与数值的弱比较

文章目录 参考环境声明弱比较隐式类型转换字符串连接数学运算布尔判断相等运算符 字符串与数值的弱比较字符串转化为数值的具体规则字符串与数值的弱比较一般情况科学计数法前缀 0E 与 0e PHP8 在字符串与数值的弱比较方面做出的改动数值字符串优化 参考 项目描述搜索引擎Bing…

Qt-键盘消息的传递-键盘消息的获取-C++

文章目录 1.概述2.焦点3.强制获取键盘消息4.键盘常用组合方法5.总结 1.概述 QKeyEvent 类用来描述一个键盘事件。当键盘按键被按下或者被释放时&#xff0c;键盘事件便会被发送给拥有键盘输人焦点的部件。 QKeyEvent 的 key() 函数可以获取具体的按键&#xff0c;对于 Qt 中给…