如何检测磁盘已满错误并在获得可用磁盘空间后让程序恢复

tia*_*nya 4 c c++ linux filesystems

我正在编写一个可在LINUX上运行的应用程序,该程序使用fprintf和fwrite写入磁盘。我希望能够捕获“磁盘已满”错误,提示用户腾出更多空间,然后恢复运行,好像什么都没发生一样。有没有合适的解决方案?

Jer*_*ner 5

检查对fprintf()和的每次调用的返回值fwrite()。如果任何一个调用返回负值,请检查errno是否errno等于EDQUOTENOSPC,请参见联机帮助页以进行写操作(或在fprintf()甚至有的情况下ENOMEM,如fprintf的某些联机帮助页中所述,但并非全部)。如果是这样,则可能是磁盘空间不足。

至于恢复操作,好像什么都没发生;那有点难;您需要跟踪已成功将哪些数据写入磁盘的情况,以便在通知用户并且他们指示是时候再试一次之后,您可以从重新写入数据开始错误发生。这意味着将写入状态保持在某种结构中(即,不仅在堆栈上),以便您可以从写入功能中返回,然后在以后恢复它。(或者,或者在单独的线程中进行编写,然后让该线程通知主线程,然后阻塞直到主线程通知它可以继续进行是安全的……但这可能会有些棘手)

  • ENOMEM用于存储。ENOSPC用于磁盘 (2认同)