epoll_create, epoll_create1 - 创建一个 epoll 文件描述符
#include <sys/epoll.h>
int epoll_create(int size);
int epoll_create1(int flags);
epoll_create()
epoll_create() 创建一个新的 epoll 实例。 从 Linux 2.6.8 开始,size 参数被忽略,但必须大于零; 见NOTES。
epoll_create() 返回一个指向 epoll 实例的文件描述符。 此文件描述符用于所有后续对 epoll 接口的调用。 当不再需要时,应使用 close(2) 关闭此文件描述符。当所有引用 epoll 实例的文件描述符都已关闭时,内核会销毁该实例并释放相关资源以供重用。
epoll_create1()
如果 flags 为 0,那么除了丢弃过时的 size 参数这一事实之外,epoll_create1() 与 epoll_create() 完全相同。 可以在标志中包含以下值以获得不同的行为:
- EPOLL_CLOEXEC
在文件描述符上设置 close-on-exec (FD_CLOEXEC) 标志。 等价于open(2) 中O_CLOEXEC标志。
成功时,这些系统调用返回一个文件描述符(一个非负整数)。 出错时,返回 -1,并设置 errno 以指示错误。
EINVAL
参数size是负数
EINVAL
(epoll_create1()) 标志中指定的值无效。
EMFILE
达到了/proc/sys/fs/epoll/max_user_instances 对每个用户施加的 epoll 实例数量限制。
EMFILE
已达到每个进程对打开文件描述符数量的限制。
EMFILE
已达到系统范围内打开文件总数的限制。
ENOMEM
没有足够的内存来创建内核对象。
epoll_create() and epoll_create1() are Linux-specific.
在最初的 epoll_create() 实现中,size 参数通知内核调用者希望添加到 epoll 实例的文件描述符的数量。 内核使用此信息作为最初在描述事件的内部数据结构中分配的空间量的提示。 (如有必要,如果调用者的使用量超过给定的提示,内核将分配更多空间。)如今,不再需要此提示(内核动态调整所需数据结构的大小而无需提示),但大小仍然必须 大于零,以确保在旧内核上运行新的 epoll 应用程序时向后兼容。
网友评论