按理说,在网线插入的时候,/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;
}
离线