在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
);
它有两个版本,宽子的版本和改自己的版本。这是因为出于考虑兼容性的问题。
WINBASEAPI
HANDLE
WINAPI
CreateFileA(
_In_ LPCSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);
WINBASEAPI
HANDLE
WINAPI
CreateFileW(
_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还可以进行事务性操作。我的理解是跟原子操作类似,只有一个事物执行完成之后,它的所有操作才会生效,否则,它会回滚到操作这个事务之前状态。