《C语言:高级I》PPT课件

《C语言:高级I》PPT课件

ID:36433840

大小:499.60 KB

页数:24页

时间:2019-05-09

《C语言:高级I》PPT课件_第1页
《C语言:高级I》PPT课件_第2页
《C语言:高级I》PPT课件_第3页
《C语言:高级I》PPT课件_第4页
《C语言:高级I》PPT课件_第5页
资源描述:

《《C语言:高级I》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、主讲老师:欧阳坚欢迎您到(千锋学院)来学习!高级IO非阻塞IO阻塞IO数据没有准备好,读操作就会阻塞数据不能立即被收时,写操作就会阻塞打开文件时阻塞,直到某些条件发生非阻塞IO立即返回,并用错误值来表示当前的状态指定非阻塞方式打开时指定O_NONBLOCK标志使用fcntl打开或关闭非阻塞方式网络编程时,使用非阻塞,用轮询方式发送使用多线程可以避免使用非阻塞IO,但是同步开销较大多路IO当程序需要同时从两个输入读数据时使用多进程/多线程,同步复杂,进程线程开销使用非阻塞IO,交替轮询通过信号使用异步I

2、O,无法判断哪个IO完成多路IO:把关心的IO放入一个列表,调用多路函数多路IO函数阻塞,直到有一个IO数据准备好后返回返回后告诉调用者哪个描述符准备好了selectintselect(intmaxfdp1,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*tvptr);调用select时通过参数告诉内核用户感兴趣的IO描述符关心的IO状态:输入,输出或错误调用者等待时间返回之后内核告诉调用者多个描述符准备好了哪些描述符发生了变

3、化调用返回后对准备好的描述符调用读写操作不关心的描述符集合传NULLselectselect函数执行正确后返回好的描述符个数返回0指示超时返回1指示调用发生错误参数timeval定义一个时间长度structtimeval{longtv_sec;/*seconds*/longtv_usec;/*andmicroseconds*/};如果三个描述符集合全都是空指针,select就变成一个精度比较高的计时器selecttvptr==NULL无限等待被信号打断时返回1,errno设置成EINTRtvptr->

4、tv_sec==0&&tvptr->tv_usec==0不等待立即返回tvptr->tv_sec!=0

5、

6、tvptr->tv_usec!=0等待特定时间长度,超时返回0selectfd_set是一个位向量,每位表示一个描述符selectintFD_ISSET(intfd,fd_set*fdset);测试某个描述符是否在集合内voidFD_CLR(intfd,fd_set*fdset);从集合内把一个描述符移除voidFD_SET(intfd,fd_set*fdset);把一个描述符加入集合voidFD

7、_ZERO(fd_set*fdset);清空描述符集合select第一个参数maxfdp1是最大的描述符值加1最大的描述符值FD_SETSIZEselectselect可以把同一个描述符同时放取读和写集合当读和写者准备好时,返回值的计数分别加1次普通文件的三种状态总是返回准备好的状态是否阻塞式IO不会影响select的结果如果一个描述符到了文件结尾,select返回的状态是准备好对一个准备好的描述符,读出长度是0表示到达结尾pselectintpselect(intmaxfdp1,fd_set*res

8、trictreadfds,fd_set*restrictwritefds,fd_set*restrictexceptfds,conststructtimespec*restricttsptr,constsigset_t*restrictsigmask);使用timespec结构来计时,精度更高使用的是绝对时间点pselect计算绝对时间pselectsigmask信号掩码如果为空,行为和select一样如果不为空,指定的信号掩码在调用时会被以原子操作的方式安装上当函数返回时,恢复原来的信号掩码poll

9、intpoll(structpollfdfdarray[],nfds_tnfds,inttimeout);所有文件描述符放在一个数组里,nfds是长度pollPOLLIN优先不低于POLLRDNORM

10、POLLRDBAND的数据可读POLLRDNORM普通优先级数据可读POLLRDBANDPOLLPRI高优先级数据可读.POLLOUT普通优先级数据可写POLLWRBANDPOLLERR出错POLLHUP挂起,目前还有数据等待操作POLLNVAL描述符不是一个打开的文件polltimeout==-1永久

11、等待timeout==0不等待timeout>0等待的毫秒数内存映射把一个文件映射到一块内存,对内存的读写访问就相当于对文件内容进行读写void*mmap(void*addr,size_tlen,intprot,intflag,intfiledes,off_toff)执行正确返回内存地址,错误返回MAP_FAILEDaddr用于指定内存起始地址,用0系统自动选择filedes是已经打开的文件描述符,len是映射的长度off是文件起始映射的偏移量内存映射p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。