某笔试题,当时基本是答对了吧,现在做下实验验证一下。
题意就是软件在写一个log文件,比如log.txt,在linux下mv log.txt log2.txt后会怎样?
写了个Python程序,有些细节要注意:
- 输出有序数字,方便查看输出内容的时序。
- sleep一下,免得一下子log太多东西。
- 要flush一下,不然会等缓冲区满了再写盘,影响实验。
- python没有自增
import time
fout = open("/tmp/log", "w")
fin = open("/tmp/log", "r")
i=1
while True:
try:
time.sleep(1)
fout.write("%d\n"%i)
i += 1
fout.flush()
except KeyboardInterrupt:
data = fin.read()
print data
break
实验结果:
- 运行时cat /tmp/log查看结果,正常输出
- mv /tmp/log /tmp/log2 后,/tmp/log文件没了!/tmp/log2文件继续在增加,而且是从1开始的。
- 按ctrl+c后,有输出,而且从1开始
APUE对文件这块讲得不是特别清楚,dentry都没提起。但基本的概念就是文件的metadata和data是分开存的。