显然,即使在使用同步WriteFile()API时,Windows文件caching也会asynchronous地将数据刷新到磁盘。 引用MSDN上的“文件caching” :
默认情况下,写入操作将文件数据写入系统文件caching,而不是写入磁盘,这种types的caching被称为写回caching。
假设不使用直写和无缓冲标志,如果实际写入磁盘失败会发生什么? 客户可以通知这种失败吗? 预期的这种失败的客户端error handling模型是什么? 想到“火与忘”和“写与祈祷”,但也许还有其他的东西。
第二个问题:是否有某些类别的错误能保证及早发现? 例如,如果磁盘已满,WriteFile()总是返回一个错误? – 即使实际写入磁盘将被延期?
我想知道如何编写可靠的文件I / O响应这些types的错误,而不禁用Windows文件caching。
奖励要点:在其他操作系统上的处理方式是否有所不同? 你能推荐一个关于这个话题的好资源吗?
在Windows 7中,通过通知区域的弹出对话框通知用户。
正常的错误(如磁盘已满,缺少权限等)会立即报告给应用程序,这些错误不会导致延迟失败。
后期故障只能发生在少数情况下,如硬件故障或操作系统崩溃。 如果连接因任何原因意外降落,写入网络共享时也会发生这种情况。
在大多数情况下,应用程序不必担心这一点。 在这种情况下,数据将会丢失; 让用户处理它。
如果您正在编写的数据异常重要,那么您可能需要担心,在这种情况下,您将不得不使用直写和/或无缓冲标志。
没有第三种选择。