码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-27 00:13:59      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

10.1 打开和关闭设备

10.1.1 设备的定义——在Windows中可以与之进行通信的任何东西。

(1)常见设备及用途

设备

用途

用来打开设备的函数

文件

永久存储任何数据

CreateFile(pszName为路径名或UNC路径名)

目录

属性和文件压缩的设置

同上,如果指定FILE_FLAG_BACKUP_SEMANTICS标志,将打开一个目录。可以改变目录的属性(如正常或隐藏等)和他们的时间戳

逻辑磁盘驱动器

格式化驱动器

CreateFile(pszName为\\.\x:)其中的x是驱动器的盘符。可以用来格式化驱动器或检测驱动器媒介的大小

物理磁盘驱动器

访问分区表

CreateFile(pszName为\\.\PHYSICALDRIVEx:)打开物理驱动器中,其的x是物理驱动器的盘符。如\\.\PHYSICALDRIVE0,表示第一个物理驱动器

串口

通过电话线传输数据

CreateFile(pszName为"COMx")

并口

将数据传输至打印机

CreateFile(pszName为"LPTx")

邮件槽

一对多数据传输,通常是通过网络传到另一台运行的Windows的机器

邮件槽服务器:CreateMailslot(pszName为"\\.\mailslot\mailslotname")

邮件槽客户端:CreateMailslot(pszName为"\\servername\mailslot\mailslotname")

命名管道

一对一数据传输,通常是通过网络传到另一台运行Windows的机器上

服务器端:CreateNamePipe(pszName为

"\\.\pipe\pipename")

客户端:CreateFile(pszName为

"\\servername\pipe\pipename")

匿名管道

单机上的一对一数据传输(绝不会跨网络)

CreatePipe用来打开服务器和客户端

套接字

报文或数据流的传输,通常是通过网络传到任何支持套按字的机器上(机器不一定要运行Windows操作系统

Socket、accept或AcceptEx

控制台

文本窗口中的屏幕缓存

CreateConsoleScreenBuffer或GetStdHandle

(2)设置与设备通信的参数,如SetCommConfig设置串口的波特率;SetMailslotInfo设置超时邮件槽的超时值。

(3)关闭通信:对于大多数设备,调用CloseHandle即可,但套接字用closesocket

(4)获取设备的类型:GetFileType,返回值如下

  ①FILE_TYPE_UNKNOWN:未知类型  ②FILE_TYPE_DISK:磁盘文件

  ③FILE_TYPE_CHAR:字符文件,一般指并口并设备或控制台

  ④FILE_TYPE_PIPE:命名管道或匿名管道

10.1.2 细看CreateFile

(1)CreateFile函数

参数

描述

pszName

既可以是设备的类型,也可表示该类设备的某个实例

dwDesiredAccess

数据传输的方式

0:只能改变设备的配置,不能读取数据或写入数据

GENERIC_READ:允许对设备进行只读访问

GENERIC_WRITE:只写访问(注意不可读)

GENERIC_READ|GENERIC_WRITE:可读可写

dwShareMode

指定设备的共享特权

①0:独占对设备的访问如果设备己经打开,CreateFile调用会失败。同样,如果我们成功打开设备,那样后续的CreateFile会失败。

②FILE_SHARE_READ:只共享读(不能修改设备的数据)

A、如果设备己被只写或独占方式打开,则我们的CreateFile会失败。

B、如果我们成功打开,则后续的使用GENERIC_WRITE调用CreateFile会失败。

②FILE_SHARE_WRITE:只共享写(不能读取设备的数据)

A、如果设备己被只读或独占方式打开,则我们的CreateFile会失败。

B、如果我们成功打开,则后续的使用GENERIC_READ调用CreateFile会失败。

③FILE_SHARE_WRITE|FILE_SHARE_READ:共享读写

A、如果设备己被独占方式打开,则我们的CreateFile会失败。

B、如果我们成功打开,则后续的要求独占读取(即有dwShareMode=0,

dwDesiredAccess=GENERIC_READ)、独占写入独占读写调用CreateFile会失败。

④FILE_SHARE_DELETE:此时当删除或移动文件时会标志为待删除,当所有打开的句柄都被关闭时,才真正的删除。

psa

安全属性,通常设为NULL,默认时返回的句柄是不可继承的。

dwCreateDisposition

对文件的意义比其他设备的类型更大

CREATE_NEW:创建新文件,如果存在同名文件,CREATEFILE失败

CREATE_ALWAYS:无论是否存在同名,都创建一个新文件,被覆盖旧文件

OPEN_EXISTING打开己有的文件或设备,如果不存在,CREATEFILE失败。如果是打开文件之外的设备,必须设置该标志。

OPEN_ALWAYS:如果文件己存在,直接打开。如果不存在,则先创建再打开。

TRUNCATE_EXISITING:打开己有的文件并将文件大小截断为0

dwFlagsAndAttributes

用于微调与设备之间的通信(如果是文件,则设置文件的属性)见后面第2点的分析

hFileTemplate

可以为NULL,也可以是一个文件句柄

①如果hFileTemplate标识一个文件句柄,则dwFlagsAndAttributes参数会被忽略,转而使用hFileTemplate模板文件的属性,但此时hFileTemplate必须先以GENERIC_READ打开。

②如果CreateFile要打开而不是创建新文件时,则hFileTemplate被忽略

返回值

成功:返回文件或设备句柄

失败:INVALID_HANDLE_VALUE(-1),注意不是NULL!

 

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

标签:

原文地址:http://www.cnblogs.com/5iedu/p/4762010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!