gpt4 book ai didi

c - 延迟写入错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:10 31 4
gpt4 key购买 nike

在过去的几个月里,我们一直在因延迟写入错误而丢失数据。我在自定义代码和收缩包装应用程序中都遇到过错误。例如,下面的错误消息来自 Visual Studio 2008 构建解决方案

Windows - Delayed Write Failed : Windows was unable to save all the data for the file \Vital\Source\Other\OCHSHP\Done07\LHFTInstaller\Release\LHFAI.CAB. The data has been lost. This error may be caused by a failure of your computer hardware or network connection. Please try to save this file elsewhere.

例如,当它出现在 Adob​​e、Visual Studio 或 Word 中时,不会造成任何危害。主要问题是当我们的自定义应用程序(将 dBase 文件中的数据写入网络共享的直接 C 应用程序)出现时。

从程序的角度来看,写入成功。它删除源数据,并继续下一条记录。几分钟后,Windows 弹出一条错误消息,说发生了延迟写入,数据丢失了。

我的问题是,我们可以做些什么来帮助我们的网络/服务器团队隔离并纠正问题(阅读,说服他们问题是真实的。简单地告诉他们很多很多次还没有说服他们)你对我们如何编写以避免数据丢失有什么建议吗?

最佳答案

与任何现代操作系统一样,Windows 上的写入实际上不会发送到磁盘,直到操作系统找到它为止。这是一个巨大的性能胜利,但问题(正如您所发现的)是您无法在写入时检测到错误。

每个执行异步写入的操作系统还提供了将数据强制写入磁盘的机制。在 Windows 上,FlushFileBuffers_commit函数就可以了。 (一个用于 HANDLE,另一个用于文件描述符。)

请注意,您必须检查每个磁盘写入的返回值,这些同步函数的返回值,以确保数据已写入磁盘.另请注意,这些函数会阻塞并等待数据到达磁盘——即使您正在写入网络服务器——因此它们可能会很慢。在您确实需要将数据推送到稳定存储之前不要调用它们。

有关更多信息,请参阅 fsync() Across Platforms .

关于c - 延迟写入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6777788/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com