GNULinux编程课件第10章

GNULinux编程课件第10章

ID:36519568

大小:312.60 KB

页数:40页

时间:2019-05-09

GNULinux编程课件第10章_第1页
GNULinux编程课件第10章_第2页
GNULinux编程课件第10章_第3页
GNULinux编程课件第10章_第4页
GNULinux编程课件第10章_第5页
资源描述:

《GNULinux编程课件第10章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第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状态,另

2、一种方法是由操作系统通知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模式同步阻塞

3、I/O模式概念通常,在进行I/O操作时,必须等到I/O操作完成才能进行下一步的操作,这种操作方式称为同步阻塞I/O模式,同步阻塞I/O模式实例分析//exam10-1.cintfd_line,fd_kb,fd_display;charchr_from_kb[10];charchr_from_line[10];voidtest(){while(1){read(fd_kb,&chr_from_kb,1);//非阻塞write(fd_line,&chr_from_kb,1);read(fd_line,&chr_from_line,1);//

4、非阻塞write(fd_display,&chr_from_line,1);}}同步非阻塞I/O模式概念在进程发出文件读写请求后,无论I/O操作是否完成,立刻返回。这样进程可继续执行后续代码。为了获知文件的I/O操作是否完成,需不断地对文件I/O状态进行测试。同步非阻塞I/O模式同步非阻塞I/O模式方法一:在打开文件时,设定打开的方式为非阻塞方式,例如:open("fifo1",O_RDONLY

5、O_NONBLOCK);方法二:如果文件已经打开,可通过fcntl函数改变文件的I/O模式.方法三:如果文件已经打开,也可通过ioctl函数

6、来改变I/O操作的方式。同步非阻塞I/O模式头文件#include#include#include函数原型intfcntl(intfildes,intcmd)intfcntl(intfildes,intcmd,longarg)功能设置文件描述符的相关特性参数fildes文件描述符cmd操作的指令arg操作的参数返回值错误,返回-1,否则,依操作而定多路复用I/O模式概念基于多路复用I/O模式的进程可同时对多个文件描述符的读写状态进行检测,直到发现这些描述符中某个的状态发生

7、了变化时返回。这表明检测到某文件的I/O操作已经完成。此时,进程可根据返回的状态进行真正的读写操作。多路复用I/O模式多路复用I/O模式头文件#include函数原型intselect(intn,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)功能I/O多路复用参数n表示最大的文件描述符+1readfds可读文件描述符集合writefds可写文件描述符集合exceptfds异常文件描述符集合timeout超时结束时间

8、返回值0超时返回n若检测到文件描述符状态发生改变,返回状态改变的个数<0若发生错误,信号驱动的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

9、/O模式概念在进程发出I/O读写请求后,,无论I/O操作是否完成,立刻返回,继续执行后续的代码,当要求的I/O操作完成时,内核向发出请求的进程发送信号,通知I/O操作已完成,此时,操作的数据已就需,无需在内核与用户空间之

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

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

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