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

  • 相关阅读:
    define和typedef
    keil5配置stm32库函数开发
    SPI、CAN、I2C
    flash,sram
    关于网络地址
    关于定时器、波特率、TH和TL值的计算
    关于串口工作方式
    ad各层
    AD快捷键
    OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token
  • 原文地址:https://www.cnblogs.com/free-1122/p/11916853.html
Copyright © 2011-2022 走看看