【发布时间】:2015-07-28 12:31:00
【问题描述】:
我正在学习有关 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
【问题讨论】:
-
这是一个错字,只有 Internal 成员被更新。
-
那你是什么意思?
-
这是文档中的错误。如果你想安全起见,请将偏移量保存在单独的变量中,自行更新,并在每次操作之前将其复制到 OVERLAPPED 结构中。
标签: c++ winapi readfile overlapped-io