是使用ReadFile时更新的重叠结构?

时间:2015-05-16 17:48:00

标签: c++ winapi readfile overlapped-io

我正在学习win32编程方面的知识。 我读了参考手册(这里:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365467%28v=vs.85%29.aspx

  

如果lpOverlapped不为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

1 个答案:

答案 0 :(得分:1)

由于评论表明文档中存在错误。实际行为是文件指针被更新,就像lpOverlapped是NULL并且句柄是同步的一样。旧版本的文档可以做到这一点。以下内容取自2000年7月版Platform SDK文档:

  

ReadFile 函数从位置开始从文件中读取数据   由文件指针指示。读取操作完成后,   文件指针由实际读取的字节数调整,除非   使用重叠属性创建文件句柄。 [...]

     

如果未使用FILE_FLAG_OVERLAPPED打开 hFile 并且 lpOverlapped 不为NULL,   读取操作从 OVERLAPPED 结构中指定的偏移量开始。   在读取操作完成之前, ReadFile 不会返回。