第九课 高级文件 IO 编程. 本章的主要内容 高级文件 IO 概述 Select 模型 Poll 模型 实验.

Slides:



Advertisements
Similar presentations
第八章 第四节 机动 目录 上页 下页 返回 结束 一个方程所确定的隐函数 及其导数 隐函数的微分法.
Advertisements

面向侧面的程序设计 方林博士 本文下载地址:
网络应用程序设计 - unit 07 I/O 模型. 2 主要内容  I/O 模型  阻塞式 I/O 模型  非阻塞式 I/O 模型  输入输出多路复用 I/O 模型  信号驱动 I/O 模型.
高级服务器设计和实现 1 —— 基础与进阶 余锋
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Linux 进程间通信 利用管道进行通讯. 2 主要内容 传统进程通信 信号通信 管道通信 System V IPC 进程通信 消息队列 共享主存 信号量 Socket 网络进程通信.
FD班座谈会 -结合学校目标 找准自己位置-
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
第二章 项目一:企业厂区与车间平面设计 1.
香港普通話研習社科技創意小學 周順強老師.
法國大革命                                                                            
營建自動化 -營建管理資訊化 授課老師:劉俊杰 副教授 中華民國89年9月27日.
第 5 章 文件I/O操作.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
SQL Injection.
网络常用常用命令 课件制作人:谢希仁.
临界区软件互斥软件实现算法.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
按键驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
Online job scheduling in Distributed Machine Learning Clusters
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
如何生成设备节点 广州创龙电子科技有限公司
Linux 文件操作——系统调用和标准 IO 库
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
Networking Games 程式設計 潘仁義 CCU COMM.
(第2版).
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
第四章 团队音乐会序幕: 团队协作平台的快速创建
DQMClientDim.cxx及双光子练习
Drupal Dev 我想知道:什么时候、什么变化.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
信号量(Semaphore).
iSIGHT 基本培训 使用 Excel的栅栏问题
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chinese Virtual Observatory
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab2.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
考察点:switch\while\for System.in\Scanner char vs int
第六章 直接成本法.
《操作系统设计与实现》 Linux系统编程.
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
Presentation transcript:

第九课 高级文件 IO 编程

本章的主要内容 高级文件 IO 概述 Select 模型 Poll 模型 实验

高级 IO I/O 的方式有很多种,我们之前使用的 IO 方式的特点是: – 单路:只能等待一个 fd 可读或可写 – 阻塞:睡眠直到 fd 可读或可写 – 同步: read 和 write 必须结束才返回?? 因此有与之对应的: – 多路:同时等待多个 fd 可读或可写 – 非阻塞: fd 不可读或不可写立即返回 – 异步: I/O 没有结束 read 和 write 也可返回

非阻塞 I/O 以非阻塞方式打开一个文件,如: fd = open(“love.txt”, O_RDWR | O_NONBLOCK, 0); 也可以用 fcntl 让一个已经打开的文件描述 字变成非阻塞: flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK);

非阻塞 I/O 对一个非阻塞的 fd 来说,如果它无数据可 读,则 read(fd, …); 返回 -1 , errno 的值被 置为 EAGAIN ;同样,如果它暂时不可写, write(fd, …); 返回 -1 , errno=EAGAIN 。 (阻塞式 I/O 在这两种情况下都是等待)。 注意:应当区分无数据可读与文件已经读 到结尾。后者 read 返回 0 ,无论阻塞否。 非阻塞 I/O 经常与多路 I/O 配合使用。

多路 I/O 想像一个 fd 集合 fdset ,以及一个函数 fun , 我们指定:调用 fun(fdset) 进程进入睡眠, 直到 fdset 中至少有一个 fd 可读,此时 fun 返 回并把可读的 fd 保存在 fdset 中。 这样做的好处是,我们可以同时从多个 fd 中等待数据,如果某一个可读我们就从中 读取,否则就睡眠。

多路 I/O Unix 下就存在这种的一个 fun ,但它的功能更加强大。 它就是 select (在有的系统下为 poll , Linux 都支持) 函数原型: #include int select(int maxfdp1, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

多路 I/O 函数的声明太复杂。编写一个程序来综合 的演示多路 I/O ,非阻塞 I/O ,以及 FIFO 。

I/O 处理的模型  阻塞 I/O 模型:在这种模型下,若所调用的 I/O 函数没有完 成相关的功能,则会使进程挂起,直到相关数据到达才会 返回。如常见对管道设备、终端设备和网络设备进行读写 时经常会出现这种情况。  非阻塞模型:在这种模型下,当请求的 I/O 操作不能完成时, 则不让进程睡眠,而且立即返回。非阻塞 I/O 使用户可以 调用不会阻塞的 I/O 操作,如 open() 、 write() 和 read() 。如 果该操作不能完成,则会立即返回出错(例如:打不开文 件)或者返回 0 (例如:在缓冲区中没有数据可以读取或 者没空间可以写入数据)。 

I/O 多路转接模型:在这种模型下,如果请求的 I/O 操作阻塞,且它不是真正阻塞 I/O ,而是让其中的 一个函数等待,在这期间, I/O 还能进行其他操作。 如本节要介绍的 select() 和 poll 函数 () ,就是属于这 种模型。  信号驱动 I/O 模型:在这种模型下,通过安装一个 信号处理程序,系统可以自动捕获特定信号的到 来,从而启动 I/O 。这是由内核通知用户何时可以 启动一个 I/O 操作决定的。  异步 I/O 模型:在这种模型下,当一个描述符已准 备好,可以启动 I/O 时,进程会通知内核。现在, 并不是所有的系统都支持这种模型。

select() 和 poll() select() 和 poll() 的 I/O 多路转接模型是处理 I/O 复用的一个高效的方法。它可以具体设 置程序中每一个所关心的文件描述符的条 件、希望等待的时间等,从 select() 和 poll() 函数返回时,内核会通知用户已准备好的 文件描述符的数量、已准备好的条件等。 通过使用 select() 和 poll() 函数的返回结果, 就可以调用相应的 I/O 处理函数了。

select() 函数格式( 1 )

select() 函数格式( 2 ) 一般来说,在使用 select() 函数之前,首先使用 FD_ZERO() 和 FD_SET() 来初始化文件描述符集,在使用了 select() 函数时,可 循环使用 FD_ISSET() 来测试描述符集,在执行完对相关文件描 述符的操作之后,使用 FD_CLR() 来清除描述符集。

poll() 函数格式

思考与练习 使用多路复用函数实现 3 个串口的通信:串 口 1 接收数据,串口 2 和串口 3 向串口 1 发送 数据。