• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-08-24 14:58 Aet 隐藏边栏 |   抢沙发  6 
文章评分 0 次,平均分 0.0

概述

  1. 在Windows应用程序中,我们可以给每个线程指定一个处理器,这样在多个处理器的机器上就可以同时执行多个操作,从而提高吞吐量。
  2. 但是,当一个线程发出一个同步I/O请求的时候,它就会被临时挂起,知道设备完成I/O请求为止。此类挂起会影响性能,因为线程卡在那里不能做别的事情。
  3. 为了不让线程闲下来,我们需要让各个线程就它们正在执行的操作互相通信。这种通信机制叫I/O完成端口。
  4. 通过使用I/O完成端口,我们可以让线程在读取设备和写入设备的时候不必等待设备的响应,从而显著地提高吞吐量。
  5. I/O完成端口可以与设备I/O有关,也可以和设备I/O无关,简单的说,它是一种有无数种用途的绝佳的线程间通信技术。

打开和关闭设备

设备 用途
文件 永久存储任何数据
目录 属性和文件压缩的设置
逻辑磁盘驱动器 格式化驱动器
物理磁盘驱动器 访问分区表
串口 通过电话线传输数据
并口 将数据传输至打印机
邮件槽 一对多数据传输,通常是通过网络传到另一台允许Windows的机器上
命名管道 一对一数据传输,通常是通过网络传到另一台允许Windows的机器上
匿名管道 单机上的一对一数据传输
套接字 报文或数据流的传输,通常是通过网络传到任何支持套接字的机器上(不一定是Windows系统)
控制台 文本窗口的屏幕缓存
  1. 为了执行任何类型的I/O,我们必须先打开想要操作的设备并得到一个句柄。
设备 用来打开设备的函数
文件 CreateFile(pszName)(路径名或UNC路径名)
目录 CreateFile(pszName)
调用这个函数的时候指定FILE_FLAG_BACKUP_SEMANTICS标志,Windows允许我们打开一个目录。
并且,打开的同时,可以改变目录的属性。
逻辑磁盘驱动器 CreateFile(),pszName为"\\.x\:",打开逻辑磁盘驱动器,x是驱动器的盘符。
物理磁盘驱动器 CreateFile(),pszName为"\\.PHYSICALDRIVEx",打开物理磁盘驱动器,x是驱动器的盘符。
串口 CreateFile(),pszName为"COMx"
并口 CreateFile(),pszName为"LPTx"
邮件槽服务器 CreateMailslot(pszName),pszName为“\\.\mailslot\mailslotname”
邮件槽客户端 CreateFile(pszName),pszName为“\\.\mailslot\mailslotname”
命名管道服务器 CreateNamedPipe(pszName),pszName为“\\.\pipe\pipename”
命名管道客户端 CreateFile(pszName),pszName为“\\servername\pipe\pipename”
匿名管道 CreateFile用来打开服务器和客户端
套接字 Socket,accept或AcceptEx
控制台 CreateConsoleScreenBuffer或GetStdHandle

函数

设置串口的波特率

在等待读取数据的时候,可以设置一个超时值

查看设备的类型

描述
FILE_TYPE_UNKNOWN 文件为未知类型
FILE_TYPE_DISK 文件是磁盘文件
FILE_TYPE_CHAR 文件是字符文件,一般来说是一个并口设备或控制台
FILE_TYPE_PIPE 文件是一个命名管道或匿名管道

CreateFile

  1. 参数一既可以表示设备的类型,也可以表示该类设备的某个实例。
  2. dwDesiredAccess用来指定我们想以何种方式来和设备进行数据传输。
含义
0 不希望从设备读取数据或传入数据
GENERIC_READ 允许对设备进行只读访问
GENERIC_WRITE 允许对设备进行只写访问。
GENERIC_READ | GENERIC_WRITE 允许对设备进行读写操作
  1. dwShareMode用来指定设备共享特权

  2. psa安全信息

  3. ...

GetFileSizeEx

  1. 取文件的逻辑大小。
  2. 区别于GetCompressedFileSize取的是文件的物理大小。

SetFDilePointerEx

  1. 改变与文件内核对象相关联的文件指针。

SetEndOfFile

  1. 设置文件尾。

执行同步设备I/O

  1. ReadFile
  2. WriteFile
  3. 将数据刷新至设备:FlushFileBuffers

同步I/O的取消

  1. CancelSynchronousIo

异步I/O

  1. ReadFile
  2. WriteFile

取消设备I/O请求

  1. CancelIo
  2. CancelIoEx

I/O完成端口

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享