第10章 同步设备I/O和异步设备I/O(2)_同步IO和异步IO基础

10.3 执行同步设备I/O

(1)对设备读写操作的函数

  ①ReadFile/WriteFile函数


参数


描述


hFile


文件句柄


pvBuffer


指向要接收文件数据的缓冲区或把缓冲区数据写入设备


nNumbytesToRead


要读取的字节数或写入的字节数


pdwNumBytes


实际读取的字节数或写入的字节数


pOverlapped


指向OVERLAPPED结构体。

①要进行同步读写时,该参数为NULL,同时打开设备的时候,标志不能指定为FILE_FLAG_OVERLAPPED。

②要进行异步读写时,须指定该参数,同时打开设备时设置FILE_FLAG_OVERLAPPED标志。

【说明】

  ①要进行同步和异步的设置与最后一个参数pOverlapped的密切相关

  ②ReadFile只能用于哪些用GENERIC_READ打开的设备,同理WriteFile只能用于那些用GENERIC_WRITE标志打开的设备

(2)将数据刷新到设备

  ①在CreateFile函数时可通过传FILE_FLAG_NO_BUFFERING等标志来决定是否对数据进行缓存

  ②如果要强制将缓存数据写入设备可调用FlushFileBuffers函数,但要注意该设备要用GENERIC_WRITE标志打开。

(3)同步I/O的取消——CancelSynchronousIo(Vista以上版本才支持)

  ①与Read/WriteFile不同,CreateFile函数本身不能进行异步调用。如果等待时间太长,可以通过CancelSynchronousIo(hThread)来强制取消同步I/O操作并退出等待。

  ②参数hTread是由于等待同步I/O请求完成而被挂起的线程,这个句柄必须使用THREAD_TERMINATE访问权限创建,否则调用CancelSynchronousIo函数会失败。

  ③当调用CreateThread或_beginthreadex创建线程时,如果安全属性设为NULL,那么默认的权限是THREAD_IMPERSONATE

  ④当线程因等待同步I/O而被挂起,如果使用CancelSynchronousIo唤醒该线程,并取消同步操作。同时返回TRUE,但GetLastError将返回ERROR_OPERATION_ABORTED。

  ⑤调用CancelSynchronousIo的线程并不知道要唤醒的另一个线程目前的状态,如果这时另一个线程并不是因为要等待设备应被挂起,那么CancelSyncronousIo会返回FALSE,这时GetLastError将得到ERROR_NOT_FOUND。

10.4 异步设备I/0基础

10.4.1 OVERLAPPED结构

时间: 2024-10-10 17:16:45

第10章 同步设备I/O和异步设备I/O(2)_同步IO和异步IO基础的相关文章

第10章 同步设备I/O和异步设备I/O(1)

10.1 打开和关闭设备 10.1.1 设备的定义——在Windows中可以与之进行通信的任何东西. (1)常见设备及用途 设备 用途 用来打开设备的函数 文件 永久存储任何数据 CreateFile(pszName为路径名或UNC路径名) 目录 属性和文件压缩的设置 同上,如果指定FILE_FLAG_BACKUP_SEMANTICS标志,将打开一个目录.可以改变目录的属性(如正常或隐藏等)和他们的时间戳 逻辑磁盘驱动器 格式化驱动器 CreateFile(pszName为\\.\x:)其中的x

微软 Windows 10 将支持 8 英寸以下 ARM 平板设备

2015 年 1 月 24 日,  9:32 下午 - 微软本周展示了 Windows 10 一系列新的改变,也包括首次公开展示的 Windows 10 手机版,但 ARM 平板并没有得到太多提及. 而且微软官方也确认驱动 ARM 平板的 Windows RT 操作系统将只有“特殊更新提供部分 Windows 10 功能”,意味着现有 Surface RT 和 Surface 2 和 Lumia 2550 用户可能享受不到 Windows 10 完整系统功能. 不过微软仍会支持 ARM 平板设备

JavaScript高级程序设计(第三版)学习笔记8、9、10章

第8章,BOM BOM的核心对象是window,具有双重角色,既是js访问浏览器的一个接口,又是ECMAScript规定的Global对象.因此,在全局作用域中声明的函数.变量都会变成window对象的属性和方法. 例: var age = 20; function sayAge(){ alert(this.age); } alert(window.age); //20 window.sayAge(); //20 定义全局变量与在window对象上直接定义属性区别:全局变量不能通过delete操

《Linux设备驱动开发具体解释(第3版)》进展同步更新

本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTEX-A9平台. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第1章 <Linux设备驱动概述及开发环境构建>[D]删除关于LDD6410开发板的介绍[F]更新新的Ubuntu虚拟机[N]加入关于QEMU模拟vexpress板的描写叙述 第2章 <驱动设计的硬件基础> [

第10章 系统级I/O

第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出一个简单.低级的应用接口,这使得所有的输入输出都能以一种统一且一致的方式来执行: 打开文件: 内核返回一个小的非负整数,叫做描述符. Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0).标准输出(描述符为1).标准错误(描述符为2). 改变当前文件位置: 对于每个打开的文件,

阅读8,9,10章

第8章 本章主要讲需求分析,那么需求分析都包括哪些方面? 答:1 写出系统的任务和特点 2 要实现的功能模块及其作用 3 系统结构图(用UML描述) 4 采用的数据库 5 开发运行环境 第9章 本章主要讲简介项目经理的要求与能力,那么项目经理的职责是什么? 答:1.确保项目目标实现,保证业主满意 这一项基本职责是检查和衡量项目经理管理成败.水平高低的基本标志. 2.制定项目阶段性目标和项目总体控制计划 项目总目标一经确定,项目经理的职责之一就是将总目标分解,划分出主要工作内容和工作量,确定项目阶

3.26日第六次作业,第10章质量,11章人力

3.26日 第六次作业,第10章质量,11章人力 1.质量管理基本原则   以实用为核心的多元要求.系统工程.职工参与管理.管理层和第一把手重视.保护消费者权益.面向国际市场. 2.质量管理的目标顾客满意度.预防胜于检查.各阶段内的过程.   质量管理既重视结果也重视过程   实施组织主动采纳的质量改进措施(如全面质量管理.持续改进等) 3.质量管理的主要活动有哪些项目的质量管理可以分解为质量策划.质量保证与质量控制三个过程.质量策划是指确定与项目相关的质量标准,并决定如何达到这些质量标准.质量

《Linux设备驱动开发详解(第3版)》进展同步更新

本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 2014.6.30 目前初步完成4-9章,相对于第2版,这几章主要的变更. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第4章 <Linux内核模块>[F]改正关于模块使用非GPL license的问题:[F]修正关于__exit修饰函数的内存管理 第5章 <Linux文件系统与设备文件>[F]修正关于文件系统与块设备驱动关系图:[N]增加应用到驱动的file操作调用图:[N]增加通过ne

MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优化,存储引擎的相关参数设置建议将主要在下一章“常用存储引擎的优化”中进行说明. 10.1 MySQL 安装优化 选择合适的发行版本 1. 二进制发行版(包括RPM等包装好的特定二进制版本) 由于MySQL开源的特性,不仅仅MySQL AB提供了多个平