截断在另一个进程中打开的文件

截断在另一个进程中打开的文件

如果我尝试truncate -s 0 log.log:>log.log具有相同的行为),磁盘上显示的空间确实会变得可用,但文件的大小(ls -l)仍然相同(du显示较少)。据我了解,发生这种情况是因为指针仍然是“旧的”。

此行为导致我无法使用cat ... | grep ...命令:CLI 说该文件是二进制的。所以唯一的方法是使用less或其他命令。

那么,如何截断在另一个进程中以写入模式打开的文件,并在截断后具有正确的文件大小?我需要将数据log.log截断到另一个文件,或者只删除文件中的整个数据而不删除文件本身

答案1

你不能。 “下一个要写入的块”指针保存在打开文件进行写入的进程的内存中。您无法从外部访问它。

有些程序被编写为在收到信号时关闭旧日志并打开新日志。

当程序即将写入块 1024 时,简单地删除该文件将导致 1023 个零块和块 1024 中的数据。

相关内容