重叠/异步 I/O 如何工作

发布于 2024-10-31 07:22:46 字数 256 浏览 1 评论 0原文

假设我有类似的东西

readFile(.....&ol) //with overlapped

while(1){

////////.....
waitforsingleobject(//ol.hevent);

////

readfile(.....&ol)

}

,我注意到两个读取文件都从文件的开头读取......为什么?在没有重叠/异步的正常读取文件中,第二个读取文件将从第一个读取文件结束的位置开始。

Supposed I have something like this

readFile(.....&ol) //with overlapped

while(1){

////////.....
waitforsingleobject(//ol.hevent);

////

readfile(.....&ol)

}

I noticed that both readfiles read from the beginning of the file...why? In a normal readfile without overlapped/asynchronization the second readfile would start off where the first ended..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱花坊 2024-11-07 07:22:46

在文件上使用重叠 I/O 时,您将传递一个指向 OVERLAPPED 对象的指针,在本例中为 ol

OVERLAPPED 结构体有两个变量:OffsetOffsetHigh。这两个变量组合成一个64位整数,Offset为低位DWORD,OffsetHigh为高位DWORD,作为执行的偏移量的 I/O 操作。

因此,例如,如果您想在文件的第 8 个字节处启动 ReadFile,则可以将 Offset 变量设置为 8,并将 OffsetHigh 设置为 8。在将 OVERLAPPED 传递给 ReadFile 之前,将 code> 变量设置为 0。

When using overlapped I/O on a file, you pass a pointer to an OVERLAPPED object, in this case ol.

The OVERLAPPED struct has two variables, Offset and OffsetHigh. These two variables are combined into a 64-bit integer, with Offset being the lower-order DWORD and OffsetHigh being the high-order DWORD, and used as the offset to perform the I/O operation at.

So, for example, if you wanted to start a ReadFile at the 8th byte of the file, you would set the Offset variable to 8 and the OffsetHigh variable to 0 before passing the OVERLAPPED to ReadFile.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文