这篇文章跟大家分析一下“I/O多路复用中select指的是什么”。内容详细易懂,对“I/O多路复用中select指的是什么”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“I/O多路复用中select指的是什么”的知识吧。
select是用于监视多个文件描述符状态的变化的。即用来监视文件描述符读/写/异常状态是否就绪。
函数原型:int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);
select的几大缺点:
(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
(3)select支持的文件描述符数量太小了
1#include2#include3#include4#include5#include67intmain()8{9intstd_in=0;10//intstd_out=1;11fd_setreads;12//fd_setwrites;13//intmax_nums=std_out;14intmax_nums=std_in;15FD_ZERO(&reads);16//FD_ZERO(&writes);17FD_SET(std_in,&reads);18//FD_SET(std_out,&writes);19structtimeval_timeout={5,0};20intdone=0;21while(!done)22{23_timeout.tv_sec=5;24_timeout.tv_usec=0;25//switch(select(max_nums+1,&reads,&writes,NULL,&_timeout))26switch(select(max_nums+1,&reads,NULL,NULL,&_tim活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看eout))27{28case-1:29perror(\"select\");30break;31case0:32printf(\"timeout...\\n\");33break;34default://success35{36if(FD_ISSET(std_in,&reads))37{//read38charbuf[1024];39memset(buf,\'\\0\',sizeof(buf));40ssize_tsize=read(std_in,buf,sizeof(buf)-1);41if(size
还没有评论,来说两句吧...