您尚未登录。

楼主 # 2021-11-19 16:31:07

inia
会员
注册时间: 2021-07-27
已发帖子: 37
积分: 42

使用 epoll_wait 监听网线的连接状态,不知道为什么监听无效

按理说,在网线插入的时候,/sys/class/net/eth0/carrier  这个文件里面的值就会被改变。epoll_wait 就会监测到,并且去读取这个文件的值。但是知道为什么,我多次插拔网线后,都没有触发epoll_wait,求赐教。。。

#include <pthread.h>
#include <sys/epoll.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h> 
#include <sys/stat.h> 
#include <sys/ioctl.h> 
#include <linux/fs.h> 
#include <errno.h> 
#include <stdarg.h>
 
int main(int argc, char *argv[]) 
{
    int fd,epfd,res ,ret;
    int len;
    int buf[1] = {11};
    struct epoll_event evt;
    struct epoll_event evts;
    fd= open("/sys/class/net/eth0/carrier" , O_RDONLY  ,0777);

    epfd = epoll_create(1);
    if (epfd < 0) 
    {
        perror("epoll_create error");
    }
    evt.events = EPOLLIN |EPOLLET ;    //LT horizontal trigger (default).
    evt.data.fd = fd;
    ret = epoll_ctl(epfd, EPOLL_CTL_ADD,fd, &evt);
    if (ret < 0) 
    {
        perror("epoll_ctl error");
    }

    while (1)
    {
        // memset(buf, 66, sizeof(buf));
        buf[0] =255;
        res = epoll_wait(epfd, &evts, 10, -1);
        if (res < 0) 
        {
            perror("epoll_wait error");
        }
        if (evts.data.fd == fd) 
        {
            lseek(fd,0,SEEK_SET);
            len = read(fd, buf, 1);
            printf("eth0 :%d\n",buf[0] );
        }
    }
    close(fd);
	return 0;
}

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn