研一下课程高级_第1页
研一下课程高级_第2页
研一下课程高级_第3页
研一下课程高级_第4页
研一下课程高级_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级IO概述本章的内容包括记录锁非阻塞IOIO多路转换异步IO分散IO存储映射IO.记录锁如果两个人同时编辑一个文件,通常,文件的最后状态取决于写该文件的最后一个进程,但有些时候需要确保它正在单独写一个文件记录锁(record locking)可以对文件的一个区域进行锁定fcntlint fcntl(int fd, int cmd, .);cmd: F_GETLK, F_SETLK, F_SETLKW第三个参数是一个指向flock的指针struct flock short l_type; / 锁类型 off_t l_start; / 范围的开始位置 short l_whence; / 偏移计算

2、方式 off_t l_len; / 锁定长度 pid_t l_pid;锁之间的兼容性读锁写锁无锁允许允许一个或多个读锁允许拒绝一个写锁拒绝拒绝锁的隐含继承和释放当一个进程终止时,它所建立的锁全部释放任何时候关闭一个描述符时,则该进程通过这一描述符可以引用的文件上的任何一把锁都被释放由fork产生的子进程不继承父进程锁设置的锁。在执行exec后,新程序可以继承原程序的锁。如果对一个文件描述符设置了close-on-exec标志,那么将关闭文件描述符非阻塞IO传统的IO是阻塞IO,可能会让系统永远阻塞读某些类型的文件、设备,如管道、网络等写某些类型的文件、设备,如管道、网络等某些条件发生前打开某些

3、类型的文件对已经加锁的文件进行读、写某些ioctl操作某些进程间通信函数,如信号量非阻塞IO使我们可以调用open、read和write这样的IO操作,并使这些操作不会永远阻塞如果调用open获得描述符,则可指定O_NONBLOCK标志对于已经打开的描述符,则可调用fcntl,由该函数打开O_NONBLOCK文件状态标志如果使用非阻塞IO,一般说来都会使用某种程度的轮询IO多路转换如果一个进程需要并发的处理多个文件描述符,那么不管采用阻塞IO还是采用非阻塞IO都能很好的解决问题如果采用阻塞IO,那么在一个文件描述符上的阻塞可能会阻塞其他文件描述符上的请求如果采用非阻塞IO,那么必须采用忙等,浪

4、费CPU资源怎么解决?方法一:使用多进程或者多线程,每个进程(线程)应付一个文件描述符方法二:使用IO多路转接IO多路转接将关心的多个文件描述符组织在一张表中调用poll(select)函数,同时监视有的文件描述符,该函数会阻塞,知道某个或多个描述符有事件发生当其中一个或多个描述符有事件发生后,poll(select)返回,并且通过返回值指出哪些描述符有哪种类型的数据对这些描述符进行处理,一定不会阻塞#include int select(int maxfdp1, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct time

5、val *tvptr);分别通过readfds, writefds, exceptfds指示关心的读、写和其他描述符异步IO在BSD和SystemV派生的系统中,提供了使用一个信号(BSD: SIGIO, SystemV: SIGPOLL)来进行异步IO的方法该信号通知进程某个描述符已经发生了所关心的某个事件在使用异步IO之前,需要调用ioctl和fcntl来指示关心的信号和事件类型这种方法有一定局限性,只在有些设备上有效readv和writev有时候我们需要将散布在几个地方的数据一起写入到文件描述符中,或者从文件描述符读出数据分别存到分散的几个缓冲区中#include ssize_t readv(int fd, struct iovec *iov, int count);ssize_t writev(int fd, struct iovec *iov, int count);存储映射IO存储映射IO使一个磁盘文件与存储空间中的一个缓冲区映射。读写内存缓冲区就相当于读写文件中的相应字节理论上,这样的IO性能比通过read、write的高这种方法多是基于虚拟内存技术实现的映射函数#include void *mmap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论