01 IO多路复用

2020-11-26  本文已影响0人  格林哈

1 描述

2 水平触发和边缘触发

2.1 水平触发通知

2.2 边缘触发通知

1 select/poll/epoll

1.1 select

#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);
struct timeval
{      
    long tv_sec;   /*秒 */
    long tv_usec;  /*微秒 */   
};

1.2 poll

# include < sys/ poll. h>
int poll ( struct pollfd * fds, unsigned int nfds, int timeout);

struct pollfd
{
int fd;               /* 文件描述符 */
short events;        /* 等待的事件 */
short revents;       /* 实际发生了的事件 */
} ;
typedef unsigned long   nfds_t;

1.2 epoll

#include<sys/epoll.h>
// epoll instance数据结构并返回一个文件描述符
int epoll_create(int size);

typedef union epoll_data {
    void *ptr; /* 指向用户自定义数据 */
    int fd; /* 注册的文件描述符 */
    uint32_t u32; /* 32-bit integer */
    uint64_t u64; /* 64-bit integer */
} epoll_data_t;

struct epoll_event {
    uint32_t events; /* 描述epoll事件 */
    epoll_data_t data; /* 见第一个结构体 */
};

//epoll_ctl就是管理interest list的接口
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev);
// 事件等待
int epoll_wait(int epfd, struct epoll_event *evlist, int maxevents, int timeout);
上一篇下一篇

猜你喜欢

热点阅读