tia*_*nya 4 c c++ linux filesystems
我正在编写一个可在LINUX上运行的应用程序,该程序使用fprintf和fwrite写入磁盘。我希望能够捕获“磁盘已满”错误,提示用户腾出更多空间,然后恢复运行,好像什么都没发生一样。有没有合适的解决方案?
检查对fprintf()和的每次调用的返回值fwrite()。如果任何一个调用返回负值,请检查errno是否errno等于EDQUOT或ENOSPC,请参见联机帮助页以进行写操作(或在fprintf()甚至有的情况下ENOMEM,如fprintf的某些联机帮助页中所述,但并非全部)。如果是这样,则可能是磁盘空间不足。
至于恢复操作,好像什么都没发生;那有点难;您需要跟踪已成功将哪些数据写入磁盘的情况,以便在通知用户并且他们指示是时候再试一次之后,您可以从重新写入数据开始错误发生。这意味着将写入状态保持在某种结构中(即,不仅在堆栈上),以便您可以从写入功能中返回,然后在以后恢复它。(或者,或者在单独的线程中进行编写,然后让该线程通知主线程,然后阻塞直到主线程通知它可以继续进行是安全的……但这可能会有些棘手)
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |