网站大量收购闲置独家精品文档,联系QQ:2885784924

GNULinux编程课件.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GNULinux编程课件

第10章I/O操作模式 郑谦益、韩京宇 概述 I/O操作模式 文件I/O操作模式 内存的I/O映射 文件锁 终端I/O操作 I/O操作模式 I/O操作模式 阻塞方式 非阻塞方式 同步方式 异步方式 阻塞方式 概念 通常,在应用程序发出I/O请求后,如果I/O操作不能立刻完成,Linux内核将发出读写请求的进程暂时挂起,将CPU交给其他进程,等I/O完成后,重新切换回原来的进程继续运行,这种I/O处理方式称为阻塞方式。 非阻塞方式 概念 进程在发出读写请求后,不管I/O是否真正完成,可立即返回,继续执行。问题在于如何获知I/O操作已经完成,一种方法是不断地查询I/O状态,另一种方法是由操作系统通知I/O操作的完成,这种I/O处理方式称为非阻塞方式。 同步方式 概念 进程在发出文件读写请求后,如果需要进程等待或通过某种方式检查I/O操作是否完成,从而决定是否继续执行后续的工作,这种方式称为同步I/O方式。 异步方式 概念 进程在发出文件读写请求后,如果进程能继续执行其他工作,由内核以消息的方式通知进程请求的I/O操作已经完成,无需等待或检查I/O操作是否完成,这种方式称为异步I/O方式; 文件I/O操作模式 文件I/O操作模式 同步阻塞I/O模式 同步非阻塞I/O模式 I/O多路复用模式 信号驱动I/O模式 异步I/O模式 同步阻塞I/O模式 概念 通常,在进行I/O操作时,必须等到I/O操作完成才能进行下一步的操作,这种操作方式称为同步阻塞I/O模式, 同步阻塞I/O模式 实例分析 // exam10-1.c int fd_line,fd_kb,fd_display; char chr_from_kb[10]; char chr_from_line[10]; void test() { while (1) { read(fd_kb, chr_from_kb, 1); //非阻塞 write(fd_line, chr_from_kb, 1); read(fd_line, chr_from_line, 1);//非阻塞 write(fd_display, chr_from_line, 1); } } 同步非阻塞I/O模式 概念 在进程发出文件读写请求后,无论I/O操作是否完成,立刻返回。这样进程可继续执行后续代码。为了获知文件的I/O操作是否完成,需不断地对文件I/O状态进行测试。 同步非阻塞I/O模式 同步非阻塞I/O模式 方法一: 在打开文件时,设定打开的方式为非阻塞方式,例如: open(fifo1,O_RDONLY|O_NONBLOCK); 方法二: 如果文件已经打开,可通过fcntl函数改变文件的I/O模式. 方法三: 如果文件已经打开,也可通过ioctl函数来改变I/O操作的方式。 同步非阻塞I/O模式 多路复用I/O模式 概念 基于多路复用I/O模式的进程可同时对多个文件描述符的读写状态进行检测,直到发现这些描述符中某个的状态发生了变化时返回。这表明检测到某文件的I/O操作已经完成。此时,进程可根据返回的状态进行真正的读写操作。 多路复用I/O模式 多路复用I/O模式 信号驱动的I/O模式 概念 信号驱动I/O模式是利用文件描述符的I/O状态的变化,产生SIGIO信号,通过对SIGIO信号的处理,读写相应的数据。 信号驱动的I/O模式 信号驱动的I/O模式 实现步骤 1. 利用signal或sigaction函数定义信号SIGIO的处理函数。 2. 使用fcntl函数对文件描述符在状态发生变化产生SIGIO信号时,设置信号发送的对象。 3. 在运用open函数打开文件时,或运用fcntl函数对已打开的文件,设置为O_ASYNC方式。 异步I/O模式 概念 在进程发出I/O读写请求后,,无论I/O操作是否完成,立刻返回,继续执行后续的代码,当要求的I/O操作完成时,内核向发出请求的进程发送信号,通知I/O操作已完成,此时,操作的数据已就需,无需在内核与用户空间之间进行拷贝,这种I/O操作方式称为异步I/O模式。 异步I/O模式 在POSIX 1003.1标准中,定义了异步I/O模式的函数接口。Linux内核从版本2.5开始支持异步I/O模式,在文件操作集中增加了异步I/O的操作接口。 API函数 aio_read() aio_write() aio_error() aio_return() 内存的I/O映射 内存的I/O映

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档