man-翻译和epoll相关的内容,部分

蹲街弑〆低调 提交于 2019-12-12 13:48:23

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1. int epoll_create(int size);

epoll_create 新建了一个epoll的实例,请求内核分配一块存储事件结构的空间,size不是后台存储的最大尺寸,只是初始化时告诉内核应该分配多大的内部空间。

epoll_create 返回了一个对新的epoll实例引用的文件描述符。这个文件描述符在所有随后的epoll接口的调用中都会被用到。当不需要的时候,由epoll_create返回的文件描述符,需要用close()函数关闭。当所有对本文件应用的文件描述符都被关闭时,内核将把这个epoll实例破坏掉,并释放所分配的资源以实现再利用。

2  int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)

这个系统调用控制了一个被文件描述符epfd所引用的epoll实例。它在目标文件描述符fd上请求相关的操作op。

有效的op参数如下:

EPOLL_CTL_ADD 在文件描述符epfd所引用的epoll实例里注册目标文件描述符fd并把event和fd指向的文件联系起来。

EPOLL_CTL_MOD

修改和目标文件描述符fd联系起来的event。

EPOLL_CTL_DEL

移除由epfd引用的epoll实例中目标文件描述符fd。

event这个参数描述了连接fd的对象。struct epoll_event是这样定义的:

typedef union epoll_data{

    void *ptr;

    int fd;

    __uint32_t u32;

    __uint64_t u64;   

}epoll_data_t;

struct epoll_event{

    __uint32_t events;     /*Epoll events*/

    epoll_data_t data;    /*User data variable*/

}

成员变量events有一下几种类型:

EPOLLIN:

相关的文件对read可用。

EPOLLOUT:

相关的文件对write可用。

EPOLLRDHUP(自版本linux 2.6.17)

socket流结束连接,或者在连接中途中断。(这个标记在使用边缘触发模式ET时查探远端关闭)

EPOLLPRI read操作紧急数据可用

EPOLLERR 相关联的文件描述符出错。epoll_wait不管有没有在events设置它,这个事件永远被epoll_wait关注。

EPOLLHUP 相关联的文件描述符被挂断。epoll_wait不会忽略这个事件,不管events中有没有设置它。

EPOLLET 把相关联的文件描述符设置成边缘触发方式。默认的是水平触发方式。

EPOLLONESHOT (自linux 2.6.2)

把相关联的文件描述符设置单目标


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!