某同学问了我一个奇怪的问题,在此记录一下
问题
以下这段代码的本意是打开一个文件,找到文件结尾,然后实时打印在文件结尾添加的内容。
|
|
在测试时发现,首先运行程序,然后用sublime打开a.txt
,编辑然后保存,新增的内容可以正常打印出来,但是用vim和texteditor编辑保存却打印不出新增的内容,并且在vim编辑之后再用sublime修改也无法打印新增的内容。
问题大概就是这么个情况,经过一番搜索没找到什么有用的信息(主要原因还是英文太渣,不知道怎么表述。。)。
之后想到tail -f
不也是实时查看文件结尾变动情况么,发现用tail -f
得到的结果和以上这段代码表现出来的是一样的,那么就好搜索了。
原因
经过搜索tail -f
不起作用之后,我知道了原来vim,texteditor等编辑器会重新生成一个文件并且干掉之前的文件,所以他们的inode
不一样了。具体的inode可以用ls -i
查看。而echo "xxx" >> a.txt
或者sublime是直接修改文件并不改变inode号,所以f指针
才能够追踪到文件的变化。