c++ - 了解 OVERLAPPED 结构中的偏移量字段
问题描述
我正在浏览一些使用ReadFile
并指定OVERLAPPED
类型的代码。
根据我到目前为止阅读其他帖子的理解,这就是我得到的。
如果您想从ReadFile
文件的第 8 个字节开始 a ,您可以在传递to之前将Offset
变量 of设置OVERLAPPED
为 8 并将OffsetHigh
变量设置为 0 。这是有道理的。OVERLAPPED
ReadFile
现在,如果我们设置OffsetHigh
为 1 会发生什么?
解决方案
实际偏移量是一个 64 位整数。Offset
字段是低 32 位,字段OffsetHigh
是高 32 位。这在文档中有很多说明:
Offset
用户指定的开始 I/O 请求的文件位置的低位部分。
...
OffsetHigh
用户指定的开始 I/O 请求的文件位置的高位部分。
...
和成员
Offset
一起代表一个 64 位文件位置。它是从文件或类文件设备开始的字节偏移量,由用户指定;系统不会修改这些值。调用进程必须在将结构传递给使用偏移量的函数之前设置此成员,例如or (和相关的)函数。OffsetHigh
OVERLAPPED
ReadFile
WriteFile
这种低位/高位的分割是 C 早期的遗留物,当时 64 位整数类型还不普遍(这就是为什么(U)LARGE_INTEGER
Win32 API 中甚至存在类似结构的原因)。
所以:
抵消 | 偏移高 | 64 位值(十六进制) | 64 位值(十进制) |
---|---|---|---|
8 | 0 | 0x00000000'00000008 | 8 |
8 | 1 | 0x00000001'00000008 | 4'294'967'304 |
推荐阅读
- javascript - 单击带有 asp.net core MVC 的按钮后显示模式
- python - word2vec 中不同大小的向量
- ethereum - Remix + Ganache - 不能从另一个合同中调用一个合同
- ag-grid - ag-grid-angular:错误类型错误:rowData.forEach 不是函数
- angular - HttpEvent
>' 不可分配给类型 'Observable - node.js - 如何在 Typescript 中重新导入模块
- protocol-buffers - 如何在 MAC 上安装 Protobuf 3.5.1?
- r - 在 R 中优化多个 if else
- r - R中大型(p>>n)大数据集中的PCA
- reactjs - TypeError: Object(...) is not a function in react redux