过去,在linux系统上,我已经能够使用截断大型的打开日志文件(即进程正在主动写入的文件)cat /dev/null > file.log
。
但是,在10.9(小牛)上,情况似乎并非如此。我有一个11GB的文件正在由应用程序登录,但是当我对上述文件执行相同的命令时,似乎什么也没发生。
当我在一个很小的文件上尝试时,它确实起作用。
这里是ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
我也尝试cp /dev/null file.log
无济于事。
考虑到我可以利用truncate函数(man 2 truncate
在Darwin中),我对此进行了编译并针对两个文件(一个很小的文件,另一个是实际的日志文件)运行了它。再次,它针对琐碎的文件,不适用于更大的日志。
/*
* Copyright (c) 2013 Thomas de Grivel <thomas@lowh.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
...
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <unistd.h>
int main (int argc, const char **argv)
{
int e = 0;
while (--argc) {
argv++;
if (truncate(*argv, 0)) {
e = 4;
warn("%s", *argv);
}
}
return e;
}
0
无论我使用哪个文件,该过程都会返回。
du -h /tmp/file.log
结果11G /tmp/file.log
du
或du -h
说什么?该文件是否可能是稀疏文件?