• 监控端主程序


    #include <stdio.h>
    #include <unistd.h>
    #include <stdbool.h>
    #include <fcntl.h>
    #include <sys/epoll.h>

    #include <main.h>

    struct event_ext
    {
    int fd;
    bool epolled;
    uint32_t events;
    void (*handler)(int fd,void *arg);
    void *arg;
    };

    struct event_ext *epoll_event_create(int fd,uint32_t type,void (*handler)(int,void *), void *arg)
    {
    struct event_ext *e = calloc(1,sizeof(struct event_ext));

    e->fd = fd;
    e->events = type;
    e->handler = handler;
    e->arg = arg;

    return e;
    }

    int epoll_add_event(int epfd,struct event_ext *ev)
    {
    struct epoll_event epv;
    int op;

    //2. 初始化epoll_event(将附加结构挂载到epoll_event)
    epv.data.ptr = ev;
    epv.events = ev->events;

    if (ev->epolled)
    {
    op = EPOLL_CTL_MOD;
    }
    else
    {
    op = EPOLL_CTL_ADD;
    ev->epolled = true;
    }
    //3. 将epoll_event加入epoll
    epoll_ctl(epfd,op,ev->fd,&epv);

    return 0;
    }

    int epoll_del_event(int epfd,struct event_ext *ev)
    {

    epoll_ctl(epfd,EPOLL_CTL_DEL,ev->fd,NULL);
    ev->epolled = false;
    return 0;
    }

    void epoll_event_free(struct event_ext * ev)
    {
    struct event_ext *e = ev;
    free(e);
    }


    int main()
    {
    struct epoll_event events[512];
    int fds;
    int i;
    uint32_t event;
    struct event_ext *e;

    srv_main = calloc(1,sizeof(struct server));

    //1. 创建epoll
    srv_main->epfd = epoll_create(512);

    //2. 加入等待事件
    srv_main->cam = cam_sys_init();
    srv_main->srv = net_sys_init();

    //3. 等待事件发生且处理
    while (1)
    {
    fds = epoll_wait(srv_main->epfd,events,512,1000);

    for(i=0;i<fds;i++)
    {
    event = events[i].events;
    e = events[i].data.ptr;

    if ((event&EPOLLIN)&&(e->events&EPOLLIN))
    e->handler(e->fd,e->arg);

    if ((event&EPOLLOUT)&&(e->events&EPOLLOUT))
    e->handler(e->fd,e->arg);

    if ((event&EPOLLERR)&&(e->events&EPOLLERR))
    e->handler(e->fd,e->arg);
    }
    }

    return -1;
    }

  • 相关阅读:
    2021年《jmeter高级调优项目实战》秋季班(火热报名中!)
    Jmeter分布式压力测试过程可能遇到的各种坑
    Python编程与数据结构
    Xftp 提示需要升级
    [学习笔记]LGV引理
    PyTorch模型训练特征图可视化
    测试PostGIS是否安装成功
    sift算法使用
    IDEA中Maven Projects里项目灰色解决办法
    SpringCloud从入门到进阶(一)——懂生活就懂微服务
  • 原文地址:https://www.cnblogs.com/free-1122/p/11916853.html
Copyright © 2020-2023  润新知