1、select()
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
struct timeval {
long tv_sec;
long tv_usec;
};
int select (int n,
fd_set *readfds,
fd_set *writefds,
fd_set *exceptfds,
struct timeval *timeout);
FD_CLR(int fd,fd_set *set);
FD_SET(int fd,fd_set *set);
FD_ISSET(int fd,fd_set *set);
FD_ZERO(int fd,fd_set *set);
2、poll()
#include <sys/poll.h>
struct pollfd {
int fd;
short events;
shrot revents;
};
int poll (struct pollfd *fds,unsigned int nfds,int timeout);
/*timeout以秒为单位,
*若此参数为负值,表示无限等待;
*若此参数为0,表示立即返回并列出已就绪的可进行I/O的文件描述符。
*/
3、epoll()
#include <sys/epoll.h>
int epoll_create (int size);
/*size参数用于提示内核要监视的文件数目,
*此值并非最大数目,设定得当可获得较佳性能,不需要设定确切数目。
*/
struct epoll_event {
__u32 events;
union {
void *ptr;
int fd;
__u32 u32;
__u64 u64;
} data;//该data字段供用户私人使用,常将data.fd设定成fd,反馈给用户。
};
int epoll_ctl (int epfd;
int op;
int fd;
struct epoll_event *event);
op的有效值为:
EPOLL_CTL_ADD:根据event添加对fd的监视
EPOLL_CTL_DEL:移除对fd的监视
EPOLL_CTL_MOD:重新以event事件监视fd
int epoll_wait (int epfd,
struct epoll_event *events,
int maxevents,
int timeout);//返回事件的数目
/*默认是电平触发的*/