【发布时间】:2019-07-10 05:18:48
【问题描述】:
想知道是否有人知道WriteFile()(这里是存储团队?)的内部设计,磁盘驱动器/文件系统上的文件有重叠的 IO。显然,当使用系统缓冲区和标准同步WriteFile() 时,它会检查是否已满磁盘并在返回之前分配空间,因为保存实际数据的系统缓存稍后会写入(问题会导致操作系统延迟写入错误)。
所以问题是:将OVERLAPPED 结构用于将文件扩展到可用空间之外的异步WriteFile() 时是否也是如此?例如它会在等待 IO 之前立即返回 ERROR_DISK_FULL 吗?
知道的原因是为了恢复释放磁盘空间,或插入新媒体,并恢复写入。如果以这种方式完成,则相当简单,如果在挂起 IO 之后,您可能会有一堆排队的 IO,然后必须同步这些 IO,并跟踪所有排队项目的附加信息,以防移动到新媒体以调整偏移量等.
TIA!!
【问题讨论】:
-
看起来你可以用几行代码轻松地测试自己。填满您的可用磁盘空间,然后执行异步写入并查看它的反应。
-
使用 OVERLAPPED 结构 不会使 I/O 异步,所以这里不相关。您的 I/O 请求是否仅以错误
ERROR_DISK_FULL完成,或者您首先得到ERROR_IO_PENDING,然后以ERROR_DISK_FULL完成,这是未定义的
标签: windows file asynchronous winapi storage