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

智能推荐

【HTML】自定义富文本设置行高_android_zier的博客-程序员秘密

问题:由于设置行高没有类似设置字体或字体大小那样,比如设置字体样式document.execCommand('styleWithCSS', false, true)document.execCommand('fontname', false, '微软雅黑')这就需要我们自己去实现行高的效果:// 设置行距export const lineHeight = (value) =&gt; { // 获取当前的选区 let selection = window.getSelection(

android-TextView的长按复制_weixin_30455661的博客-程序员秘密

引子android很多app都支持文本的选中,复制。根据观察,主要分为两类:1)自由复制(弹出框里面支持全选)2)仅支持全选复制今天工作中遇到了全选的需求,现总结出来,方便以后查阅.自由复制这种方式很简单,只需要两行代码,(下面的红色)&lt;TextView android:layout_width="wrap_content" ...

VUE—移动端手机号正则验证,不正确显示‘请输入正确手机号’,若正确跳转到发送验证码(图文详情)_vue手机号校验后总是提示请输入手机号码_Poppy_LYT的博客-程序员秘密

VUE—移动端手机号正则验证,不正确显示‘请输入正确手机号’,若正确跳转到发送验证码先看效果图第一步:写布局&lt;input type="text" placeholder="请输入手机号" v-model="phonenumber"&gt;// 实时获取input框输入的手机号 &lt;p v-if="!isShow"&gt;请输入正确的手机号&lt;/p&gt; // 如果是t...

【Stackoverflow好问题】获取完整的堆栈信息_lizeyang的博客-程序员秘密

问题捕获了异常后,如何获取完整的堆栈轨迹(stack trace)精华回答String fullStackTrace = org.apache.commons.lang.exception.ExceptionUtils.getFullStackTrace(e)stackoverflow原址:http://stackoverflow.com/quest

sql 数据库大全_sql数据库表大全_rongrong_love_lbk的博客-程序员秘密

1. 查看数据库的版本 select @@version 2. 查看数据库所在机器操作系统参数 exec master..xp_msver 3. 查看数据库启动的参数 sp_configure 4. 查看数据库启动时间 select convert(varchar(30),login_time,120) from master..sysprocesses where ...

随便推点

mysql 存储过程 序列_Oracle 生成序列号存储过程_丛乐的博客-程序员秘密

项目中经常要根据年月日规则生成序列号,简单写了个存储过程可根据需要扩展 一、序列号存储表 -- Create tablecreate table SYS_项目中经常要根据年月日规则生成序列号,简单写了个存储过程可根据需要扩展一、序列号存储表-- Create tablecreate table SYS_GENKEY(DATESTR VARCHAR2(50),MAXCOUNT NUMBER,TYP...

基于 Openzeppelin 的可升级合约解决方案的注意事项_openzeppelin 升级合约继承_灬倪先森_的博客-程序员秘密

在编写可升级合约时请不要使用构造函数,我们知道可升级合约运行时逻辑与数据分离的,合约数据保存在中,我们编写的合约是,当合约部署时,调用初始化的数据是的,中的数据并没有被初始化,所以是无效的。包括声明时赋值初始值,因为这种做法相当于在构造函数中设置这些值。如果MyContract继承自合约 BaseContract, 那么BaseContract合约的初始化函数 initialize() 的modifier(修饰器) 必须使用 onlyInitializing,比如:声明状态变量声明状态变量时,不能对

高性能服务器架构(High-Performance Server Architecture)_high performance control display server主机服务器_zsuzsamber的博客-程序员秘密

引言本文将与你分享我多年来在服务器开发方面的一些经验。对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或者请求的服务程序,网络服务器更符合这种情况,但并非所有的网络程序都是严格意义上的服务器。使用“高性能请求处理程序”是一个很糟糕的标题,为了叙述起来简单,下面将简称为“服务器”。本文不会涉及到多任务应用程序,在单个程序里同时处理多个任务现在已经很常见。比如你的浏览器可能就在做一些并...

js中获取键盘事件_dizhi6587的博客-程序员秘密

&lt;script type="text/javascript" language=JavaScript charset="UTF-8"&gt; document.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.argume...

[DOC]XP蓝屏出错代码_Gue的博客-程序员秘密

xp出错提示 0 0x0000 作业完成。 1 0x0001 不正确的函数。 2 0x0002 系统找不到指定的档案。 3 0x0003 系统找不到指定的路径。 4 0x0004 系统无法开启档案。 5 0x0005 拒绝存取。 6 0x0006 无效的代码。 7 0x0007 储存体控制区块已毁。 8 0x0008 储存体空间不足,无法处理这个指令。 9 0x0009 储存体控制区块地址无效。

推荐文章

热门文章

相关标签