[思考]代码的语义正确真的就够了吗?(6)

http://www.smzswang.com时间:2016-10-28 13:22来源:未知

) f. seek( 0) f. truncate( 0) config. write(f)

  在 config.write(f) 之前加上 f.seek(0),能够确保文件游标回到文件开始的地方,然后用 f.truncate(0) 清空文件内容,最后才写配置然后关闭文件并将缓存刷到磁盘上。

  故事并没有到这里结束。注意到我们在上面的代码中对文件执行了两次写操作。先是清空文件,然后才是写入配置内容。如果恰好在清空文件和写入配置两步之间,程序崩溃了,会有什么后果?

  后果很严重,文件内容全部丢失,简直就是人间惨剧!

  不要说感觉说这个时间窗口很狭小,碰上的概率太小就不管它,这种黑天鹅事件不发生就算了,一旦发生那可是大故障。且不说这种数据全部丢失的事情发生在一个关键生产系统上会怎样,只要看看当初 Atom 编辑器的一个会造成文件内容全部丢失的缺陷 issue (https://github.com/atom/atom/issues/3158),就能感受到问题的严重性。

【免责声明】本文仅代表作者个人观点,与中国数码招商网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件内容有任何疑问或质疑,请联系本网将迅速给您回应并做处理。