epoll_wait()函數 Unix/Linux
epoll_wait - 等待在 epoll 文件描述符的I/O事件
內容簡介
#includeint epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
描述
Wait for events on the epoll file descriptor epfd for a maximum time of timeoutmilliseconds. The memory area pointed to by events will contain the events that will be available for the caller. Up to maxevents are returned by epoll_wait(2).
The maxevents parameter must be greater than zero. Specifying a timeout of -1 makesepoll_wait(2) wait indefinitely, while specifying a timeout equal to zero makesepoll_wait(2) to return immediately even if no events are available (return code equal to zero).
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 */ };
The data of each returned structure will contain the same data the user set with a epoll_ctl(2) (EPOLL_CTL_ADD,EPOLL_CTL_MOD) while the events member will contain the returned event bit field.
返回值
When successful, epoll_wait(2) returns the number of file descriptors ready for the requested I/O, or zero if no file descriptor became ready during the requested timeoutmilliseconds. When an error occurs, epoll_wait(2) returns -1 and errno is set appropriately.
錯誤
標簽 | 描述 |
---|---|
EBADF | epfd is not a valid file descriptor. |
EFAULT | The memory area pointed to by events is not accessible with write permissions. |
EINTR | The call was interrupted by a signal handler before any of the requested events occurred or the timeout expired. |
EINVAL | epfd is not an epoll file descriptor, or maxevents is less than or equal to zero. |
遵循於
epoll_wait(2) is a new API introduced in Linux kernel 2.5.44. The interface should be finalized by Linux kernel 2.5.66.