Windows编程_Lesson004_Windows I/O操作

来源:互联网 发布:cryengine3 编程语言 编辑:程序博客网 时间:2024/06/05 05:18
在Windows程序中,最基础的运行单元是线程!Windows为每一个线程分配一个处理器,可以让系统执行多个操作!当线程进行一个io操作时,线程会被挂起,从而影响性能。为了解决这类问题,Windows使用了一套非常好的机制I/O**完成端口**,接下来我们将学习Windows中的相关操作。

这里写图片描述

设备

文件(实际存在的)

Windows编程中的文件定义

二进制数据集合
维基百科的参考资料 文件格式列表

广义文件定义

目录(由它的系统创建的,虚拟的)

在计算机或相关设备中,一个“目录”或“文件夹”就是一个装有数字文件系统的虚拟“容器”。在它里面保存着一组文件和其他一些目录(文件夹)。一个典型的文件系统可能包含成千上万个目录(文件夹)。多个文件通过存储在一个目录(文件夹)中,可以达到有组织的存储文件的目的。在一个目录(文件夹)中的另一个目录(文件夹)被称作它的子目录(子文件夹)。这样,这些目录(文件夹)就构成了城市(hierarchy),或树形结构。

逻辑驱动器(由它的系统创建的,虚拟的)

可以降Windows上的原始磁盘空间配置为逻辑驱动器或物理驱动器。逻辑驱动器在编程中常被用于格式化驱动器。

物理磁盘驱动器(实际存在的)

常被用于获取分区表

这里写图片描述

这里写图片描述

串口

通过电话线发送型号,单通道!

并口

 8通道!

邮件槽

一对多,通过网络传输!

命名管道

一对多,本机传输!

套接字

报文或数据流传输,通过网络传输!

打开方式
这里写图片描述

这里写图片描述

这里写图片描述

CreateFile

创建或打开一个文件或I/O设备。

HANDLE WINAPI CreateFile(  _In_     LPCTSTR               lpFileName,  _In_     DWORD                 dwDesiredAccess,  _In_     DWORD                 dwShareMode,  _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,  _In_     DWORD                 dwCreationDisposition,  _In_     DWORD                 dwFlagsAndAttributes,  _In_opt_ HANDLE                hTemplateFile);

它有两个版本,宽子的版本和改自己的版本。这是因为出于考虑兼容性的问题。

WINBASEAPIHANDLEWINAPICreateFileA(    _In_ LPCSTR lpFileName,    _In_ DWORD dwDesiredAccess,    _In_ DWORD dwShareMode,    _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,    _In_ DWORD dwCreationDisposition,    _In_ DWORD dwFlagsAndAttributes,    _In_opt_ HANDLE hTemplateFile    );WINBASEAPIHANDLEWINAPICreateFileW(    _In_ LPCWSTR lpFileName,    _In_ DWORD dwDesiredAccess,    _In_ DWORD dwShareMode,    _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,    _In_ DWORD dwCreationDisposition,    _In_ DWORD dwFlagsAndAttributes,    _In_opt_ HANDLE hTemplateFile    );

这里写图片描述
但是,这样虽然可以解决宽窄字节的转换,但是有时候会出现一些问题。
比如,我们在窄字节工程中使用宽字节的字符串,我们使用CreateFile时,其实调用的是CreateFileA函数,此时就不能使用宽字节字符串了,所以以后还是显示调用A或者W版本的函数。

CreateFile还可以进行事务性操作。我的理解是跟原子操作类似,只有一个事物执行完成之后,它的所有操作才会生效,否则,它会回滚到操作这个事务之前状态。

2 0