Linux下的IO複用

IO複用時用來幹什麼的? IO複用能夠使得程序監聽多個文件描述符。 IO複用自己是阻塞的,而且若是無特殊的控制,會順序地處理 各個文件描述符。這使得程序看起來像是串行的。要實現併發 則須要引入多進程或多線程。 經常使用的IO複用有select、epoll、poll select? 在指定時間內,用於監聽用戶感興趣的文件描述符集合上的讀寫異常事件。 int select(int 監聽的文件描述符總數,fd_set*用於讀的文件描述符集合,   fd_set* 用於寫的文件描述符集合,fd_set* 用於異常的文件描述符集合,   struct timeval*超時時間) 返回值:返回實際就緒的文件描述符總數 超時失敗,超時內異常-1,並設置相應的errorno 傳入超時時間->tv_sec,tv_usec都爲0,則立返回,NULL一直阻塞到有一個文件描述符就緒 select可以處理的異常狀態只有一種:接受到帶外數據    poll系統調用的功能和select相似: 在必定時間內,輪詢是否有文件描述符處於就緒狀態。 int poll(struct pollfd* ,nfds_t 監聽的描述符總數,int timeout); 當傳入的timeout=-1,則一直阻塞到某個事件發生爲止。 timeout=0,當即返回。 epoll系統調用:Linux特有的 epoll---->epoll內核事件表---->內核事件表惟一標識epoll fd(epoll文件描述符) -->epoll fd 用於epoll全部系統調用的第一個參數。 使用方法: ----1   #include <sys/epoll.h> int epoll_create(int size); ----2  #include <sys/epoll.h> int epoll_ctl(int epoll_fd epoll文件描述符,int 增刪改? int fd要操做事件的文件,struct epoll_event*事件) 把文件描述符指向的文件上的事件,增刪改到內核事件表中。 #include <sys/epoll.h> int epoll_wait(int epoll_fd,struct epoll_event*,struct timeval); 在指定時間內等待一組文件描述符上事件就緒的文件     
相關文章
相關標籤/搜索