zzt*_*ops 4 c linux error-handling file-io
我正在使用open,read和close进行一些基本文件读取(文件以访问模式O_RDONLY打开).
当关闭文件时,我想不出一个好方法来处理可能的文件关闭错误,以确保文件正确关闭.
有什么建议?
根据我的经验close即使失败也会成功.有几个原因.
我怀疑close在一些操作系统上开始失败的一个重要原因是AFS.AFS是一个来自80年代的分布式文件系统,具有有趣的语义 - 所有的写入都是在本地缓存中完成的,当您关闭文件时,数据被写入服务器.AFS也使用在一段时间后过期的令牌进行加密验证.所以你最终可能会遇到一个有趣的情况,你对文件所做的所有写操作都是在你的令牌有效的情况下完成的,但是close实际上与文件服务器通信可以用过期的令牌完成,这意味着你写的所有数据都写到了本地缓存丢失了.这就是为什么close需要与用户沟通出错的原因.大多数文件编辑器都能正确处理(例如,emacs拒绝将缓冲区标记为不脏),但我很少看到其他应用程序可以处理这个问题.
话虽这么说,close但无论如何都不会真的失败.close是隐式的exit,exec(女巫close-on-exec文件描述符)和崩溃转储核心.那些是你不能失败的情况.exit由于关闭文件描述符失败,您不能拥有或崩溃失败.exit失败后你会做什么?崩溃?如果崩溃失败怎么办?那之后我们在哪里跑?此外,由于几乎没有人检查错误,close如果失败是常见的,你最终会遇到文件描述符泄漏和信息泄漏(如果我们在产生非特权进程之前未能关闭某些文件描述符会怎么样?).所有这些对于操作系统来说太危险了,所以即使底层文件系统关闭操作失败,我所看到的所有操作系统(*BSD,Linux,Solaris)都会关闭文件描述符.
实际上,这意味着您只需调用close并忽略它返回的任何错误.如果您有一种优雅的处理方式,它会像编辑一样失败,您可以向用户发送消息并让用户解决问题并重新打开文件,记下数据并尝试再次关闭.不要在循环中自动执行任何操作.错误在close应用程序中无法控制.
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |