【发布时间】:2013-10-04 01:53:04
【问题描述】:
Linux 的“man close”警告(SVr4、4.3BSD、POSIX.1-2001):
不检查 close() 的返回值是一个常见的,但严重 编程错误。上一次 write(2) 操作的错误很有可能在最后的 close() 中首先报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在 NFS 和磁盘配额中尤其明显。
我可以相信这个错误是常见的(至少在应用程序中;我不是内核黑客)。但是,今天或过去三年的任何时候,它有多严重?特别是:
有没有一个简单的、可重复的例子来说明这种无声的数据丢失?甚至是在 close() 期间发送 SIGKILL 之类的人为操作?
如果存在这样的例子,数据丢失是否可以比仅仅处理更优雅
printf("Sorry, dude, you lost some data.\n");?
【问题讨论】:
-
尽管我通常会检查结果,但多年后,它似乎化为乌有。期待这个答案。
-
我一般从不关心
close的结果或失败。我想如果你想开发一个非常强大的服务器软件,你会关心的。但是还有更多其他可能的错误 :-) 顺便说一句,很少有免费软件会关心close失败。 -
@BasileStarynkevitch:“...还有更多其他可能的错误...”您说的对! :-))