是在使用ReadFile时更新的重叠结构
is the overlapped structure updated when using ReadFile?
我正在学习win32编程。我在参考手册(这里:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365467%28v=vs.85%29.aspx)上读到
如果lpoverlap不为NULL,则读取操作从OVERLAPPED结构中指定的偏移量开始,并且ReadFile直到读取操作完成才返回。在ReadFile返回之前,系统更新OVERLAPPED偏移量。
然而,如果我调用ReadFile(hmyFile, &myrecord, sizeof(record_t), &n, &ov);
,我看到值ov.offset
保持不变。所以如何?我在哪里误解了参考手册中的内容?
更多细节:
文件处理程序打开为hmyFile = CreateFile(argv[1], GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
我没有使用FILE_FLAG_OVERLAPPED
正如注释所示,这是文档中的错误。实际的行为是文件指针被更新,就像lpoverlap为NULL并且句柄是同步的一样。旧版本的文档做到了这一点。以下内容摘自2000年7月版本的平台SDK文档:
ReadFile函数从文件的位置开始读取数据由文件指针指示。读取操作完成后,文件指针根据实际读取的字节数进行调整,除非使用重叠属性创建文件句柄。[…]如果hFile没有以FILE_FLAG_OVERLAPPED打开,且 lpoverlap 不是NULL,读取操作从OVERLAPPED结构中指定的偏移量开始。ReadFile直到读操作完成才返回。
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- Ardunio UNO解决了多个重叠的定时器循环
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- cmake更新缓存的变量
- 算术序列与区间的最大重叠
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 是在使用ReadFile时更新的重叠结构