多任务I/O

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);//返回事件的数目
/*默认是电平触发的*/


你可能感兴趣的:(多任务I/O)