正在写入的文件被mv或rm会怎样

$ 
$ touch a
$ ls -i
33194567 a
$ mv a mv_a
$ ls -i
33194567 mv_a
$

结论:把一个文件mv到一个新文件,不会改变这个文件的inode;

$ 
$ touch a b
$ ls -i
33194567 a  33194568 b
$ mv a b
$ ls -i
33194567 b
$

结论:把一个文件mv到一个旧文件,旧文件的inode会变成被mv文件的inode;

总结上面的两条结论:mv操作,目标文件的inode将等于源文件的inode;

因此正在写入的文件被mv,数据仍然被写入到mv后的文件里。当然本文所指的写入时机是open之后的write,而不是重新open再write

刚刚做了一下测试,正在写入的文件被rm后,数据会被写入到系统缓存中,一直会耗尽所有可用的内存,当内存不够用时,会使用虚拟内存,这个时候你就看到kswapd0进程开始逐渐消耗CPU,我没有让程序一直跑下去,不知道最终会出现个什么情况,可能会导致系统卡死等现象(只是猜测)。

最后在扩展一下,如果你自己打算实现一个日志框架,请一定要记住,在每次写入之前,一定要判断一下当前的文件句柄对应的inode是否等于对应写入文件的inode,以及写入文件是否存在,坚决做到不让外界操作影响程序原意。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值