标签:
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! |
标签:
原文地址:http://www.cnblogs.com/5iedu/p/4762010.html