Windows编程_Lesson004_Windows I/O操作

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值