zoukankan      html  css  js  c++  java
  • 监控端主程序

    #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;
    }

  • 相关阅读:
    shell script数组使用函数输出
    Yii2文件上传
    ubuntu 安装遇到黑屏
    使用函数
    ionCube 安装
    记录LNMP环境彻底删除绑定域名及网站文件夹/文件的过程
    lnmp环境 开启pathinfo
    国外知名设计教程网址收集
    26个国外在线教育网站
    前端学习网站汇总
  • 原文地址:https://www.cnblogs.com/free-1122/p/11916853.html
Copyright © 2011-2022 走看看