小编c4f*_*t0r的帖子

当我截断正在使用的文件时会发生什么?

在网络上很多人说你可以截断一个文件 using> filename或者truncate -s0 filenamewhile file begin used

我知道每次进程写入文件时,该进程都会使用偏移量写入文件,并使用这样的脚本进行测试。

#!/usr/bin/env python

import os, time

with open("passwd","w") as f: #copy of passwd file in my current directory
        f.seek(0)
        for x in xrange(1,1000):
                f.write("hello world \n" + time.ctime() + "\n")
                f.flush()
                time.sleep(2)
Run Code Online (Sandbox Code Playgroud)

每次我的脚本进行写入系统调用时,/proc/pid_number/fdinfo/3 pos字段中的偏移量都会改变,但是当我尝试使用上面列出的方法截断文件时,在我的文件中,^@当我使用vim或更少打开文件时,我看到许多这样的字符-u 和文件类型从 更改ASCII textdata并且当我使用时ls -l filename大小未更改

因此,当截断文件时,文件的偏移量不会报告回来,我正在Centos 7和中测试这个Redhat 5,所以我可以告诉在进程使用文件时更改了文件大小不会释放空间并使我的文件变脏文件。

所以我的问题是,如果我的进程有一个打开的文件pos 1000并且我打开了truncate -s0 filename,如果截断有效,下一个进程写入会发生什么?

strace …
Run Code Online (Sandbox Code Playgroud)

linux centos filesystems redhat-enterprise-linux

7
推荐指数
1
解决办法
7254
查看次数