程序意外关闭时,向文件中写入的数据会生效吗??

现在我要实现一个日志系统,为了效率,我打开了一个文件,并保持这个os.File对象,每次都通过这个对象向相应的文件中写入日志记录,但是从不调用file.Close函数来关闭它,请问这样一来,在意外发生的情况下,之前写入文件的数据会丢失吗???

我自己试了一下,数据时可以写入的,但是我不知道在服务器突然断电或者硬件因为故障突然停机时,程序来不及反应做后续收尾工作时写入的数据还会不会保存在文件中。

共 5 个回复


bigbear

停电了有UPS

# 0

16779242

。。。。。。。。。
你写入的时候就已经保存在文件里了,而不是说你close的时候才会保存

# 1

wangboo

如果文件流没有额外嵌套缓冲流的话,写入是实时的。
不过高频率写入量,为了减少io开销还是建议嵌套缓冲流

# 2

David

为了提高写操作的效率,通常数据会先写到内存中的缓冲区中,然后通过一个叫做 flush 的操作,写到实际的存储设备中保证数据的持久化保存。
close 的时候,会自动 flush;缓冲区满或者其他一些条件可能会触发 flush。程序崩溃或者断电的时候,通常没有机会执行 flush 操作,这时还在缓冲区的数据就会丢掉。
如果希望数据马上存起来,通常可以主动的调用 flush。但是,flush 本身是为了效率设计的,如果过于频繁的 flush,会降低整个系统的效率。所以,必须根据实际需要取舍。

# 3

jikai507

谢谢各位前辈的指点!明了了

# 4