linux c检测网线热插拔(netlink)_趁着d年轻的博客-程序员秘密

技术标签: netlink  

linux c检测网线热插拔(netlink)

2016-02-19 09:37 本站整理 浏览(14)
#include <sys/types.h>  
#include <sys/socket.h>  
#include <asm/types.h>  
#include <linux/netlink.h>  
#include <linux/rtnetlink.h>  
#include <unistd.h>
#include <stdlib.h>  
#include <stdio.h>  
#include <sys/ioctl.h>  
#include <linux/if.h>  
#include <string.h>  
  
#define BUFLEN 20480  
  
int main(int argc, char *argv[])  
{  
    int fd, retval;  
    char buf[BUFLEN] = {0};  
    int len = BUFLEN;  
    struct sockaddr_nl addr;  
    struct nlmsghdr *nh;  
    struct ifinfomsg *ifinfo;  
    struct rtattr *attr;  
  
    fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);  
    setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &len, sizeof(len));  
    memset(&addr, 0, sizeof(addr));  
    addr.nl_family = AF_NETLINK;  
    addr.nl_groups = RTNLGRP_LINK;  
    bind(fd, (struct sockaddr*)&addr, sizeof(addr));  
    while ((retval = read(fd, buf, BUFLEN)) > 0)  
    {  
        for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, retval); nh = NLMSG_NEXT(nh, retval))  
        {  
            if (nh->nlmsg_type == NLMSG_DONE)  
                break;  
            else if (nh->nlmsg_type == NLMSG_ERROR)  
                return -1;  
            else if (nh->nlmsg_type != RTM_NEWLINK)  
                continue;  
            ifinfo = NLMSG_DATA(nh);  
            printf("%u: %s", ifinfo->ifi_index,  
                    (ifinfo->ifi_flags & IFF_LOWER_UP) ? "up" : "down" );  
            attr = (struct rtattr*)(((char*)nh) + NLMSG_SPACE(sizeof(*ifinfo)));  
            len = nh->nlmsg_len - NLMSG_SPACE(sizeof(*ifinfo));  
            for (; RTA_OK(attr, len); attr = RTA_NEXT(attr, len))  
            {  
                if (attr->rta_type == IFLA_IFNAME)  
                {  
                    printf(" %s", (char*)RTA_DATA(attr));  
                    break;  
                }  
            }  
            printf("\n");  
        }  
    }  
  
    return 0;  
}

示例输出:
2: down eth0  // 拔出网线
2: up eth0    // 插入网线

源地址:
http://www.cpplive.com/html/1542.html
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_32343037/article/details/78487346

智能推荐

Unity Decal 贴花效果测试_decal unity_上午八点的博客-程序员秘密

贴花效果,就和名字的直接意思类似,把一张图贴到另一个物体上显示,经常被用于表现一些重复出现的图案,比如弹孔,涂鸦,污渍等。效果图:常规贴花实现Unity官方提供了一个工程这个工程主要是用来说明CommandBuffer是怎么使用的,其中有贴花的一些展示,主要是用CommandBuffer在Deferred渲染路径下实现贴花效果。使用CommandBuffer是因为需要把BuiltinRend...

Stata中常用的数据分析命令_stata $_xieyan0811的博客-程序员秘密

1. 常用的数据分析工具 Stata、SPSS、SAS、R、Python,甚至Excel都可以做数据分析工作。R和Python是程序员的首选,可以通过编写程序实现成整体的数据清洗、分析、挖掘,还可以增加扩展支持,把一套代码应用于类似的数据分析场景中。对于专业人士(如生物、医疗领域)来说,掌握编程语言的学习成本太高,他们更关注通过工具,方便快捷地得到分析结果,SPSS和Stata主要是图形界面的...

PHP截取字符串 PHP截取字符串第一个汉字后面加两个星_php 截取第一个汉字_Json-张百万的博客-程序员秘密

截取 第一个汉字后面加两个星 $rest = mb_substr($v['name'], 0, 1, 'utf-8'); //截取 第一个汉字echo $rest.'**'; //输出第一个汉字 后面加两个星 在实际项目应用中,经常遇到使用php获取字符串前几位用来比较、赋值等等。今天给大家分享使用php substr...

CentOS 8通过DNF命令安装最新版的LNMP(Linux+Nginx+MariaDB+PHP)_/var/cache/dnf/expired_repos.json is empty file_sky8g的博客-程序员秘密

今天给大家讲解下如何安装LNMP ,首先呢我们要知道上面是DNF命令是什么.DNF是什么? YUM是什么? DNF和YUM的区别,为什么用DNF代替YUM? 安装Nginx 安装PHP7.4 安装MariaDBDNF是什么?DNF仅仅是基于RPM的Linux发行版(如CentOS、RHEL、Fedora等)的下一代包管理器(在YUM之后)。在本文中,我将向您展示如何使用DNF包管理器来管理CentOS 8包。接下来跟着我学习一步一步的学习吧。如果浏览不顺畅请到原文章出处:ht...

正则表达式的简单语法及常用正则表达式 举例使用jquery获取url指定参数_lovoo的博客-程序员秘密

基本符号: ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次 + 表示匹配 一次到多次 (至少有一次) ? 表示匹配零次或一次 . 表示匹配单个字符 | 表示为或者,两项中取一项 ( ) 小括号表示匹配括号中全部字符 [ ] 中括号表示匹配括号中一个

Python学习笔记(二):列表、元组和字典章节练习题_小蝌蚪找玛玛的博客-程序员秘密

1.提示用户输入N个字符串,将它们封装成元组,然后计算并输出该元组乘以3的结果,再计算并输出该元组加上('Java', 'Python')的结果# 方法一:提示用户输入N个字符串str1 = input("请输入第一个字符串:")str2 = input("请输入第二个字符串:")str3 = input("请输入第三个字符串:")a_tuple = (str1, str2, str3)print("a_tuple:", a_tuple)# 该元组乘以3的结果b_tuple ..

随便推点

C++ QT结合FFmpeg实战开发视频播放器-02QT项目创建和Visual studio下进行QT项目的开发_虚坏叔叔的博客-程序员秘密

一、QT项目创建命名项目名称和项目路径:创建项目:选择qt版本:选择开发包:版本控制不做选择,选择本地的环境即可点击完成实现项目的创建这样,就完成了项目的创建:二、QT项目讲解注意:在我们的播放器源码中的pro文件是修改过的,大家不需要轻易修改。可以看到main.cpp在Sources中,程序入口在这里。界面的配置实在main.qml中。项目的ui部分倒是在qml文件中,你可以通过配置qml脚本来完成界面的制作。也可以通过拖拽组件的方式实现界面制作:我们主要还

Arduino开发之Digital Tilt Sensor_枫★曦的博客-程序员秘密

环境搭建:1. Arduino UNO R3开发板,2. Arduino IDE。我这里使用的是1.8.5。可以在https://www.arduino.cc/en/Main/Software下载并安装。安装好之后,桌面会有如下图标。示例开发:1.连接设备。本例中我们以DFR0030 Digital Tilt Sensor并结合DFR0021-R为例,基于A...

使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分_hascolumntype 枚举_寒冰屋的博客-程序员秘密

目录介绍使用代码添加项目和项目状态处理下载源文件 - 989.1 KB介绍这是一篇由多部分组成的文章的第三部分,演示了通过EntityFramework Core 2.1(EF)将C#enum值映射到数据库表中的string值。它解决了enum与应用程序实体的一对多和多对多关系中的值映射问题。它在ASP.NET Core Razor Page应用程序的上下文中执行此操作。...

机器学习总结——机器学习课程笔记整理_hellinger pca 随机svd_Leo-Peng的博客-程序员秘密

机器学习笔记整理说明基础点整理一些零七八碎的基础知识说明之前看paper的时候,发现语义SLAM领域涉及到很多机器学习的知识,去年开学便花时间恶补了一阵机器学习的知识,主要参考的是小象学院的机器学习课程,结合《统计学习》《机器学习》,这篇博客主要是以课程的框架对知识点进行总结,并整理了网络上相关的一些简答问题基础点整理一些零七八碎的基础知识...

和Java、C#等语言对比后,Python简直酷上天了!_Python大本营的博客-程序员秘密

1为何Python这么酷现在有很多编程语言可以使用。事实上,一个学生即使在大学里学上一整个学期的计算机语言,还是学不完所有的计算机语言(我在大学时就是这么做的)。你可能会...

我在PMCAFF,感觉身体被掏空_PMCAFF产品社区的博客-程序员秘密

PMCAFF(www.pmcaff.com):互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台。定期出品深度产品观察,互联产品研究首选。外包大师(www.waibaodashi...

推荐文章

热门文章

相关标签