如果在断开之前取消链接()文件,fwrite()会更快

我想在rhel 6平台上运行一个简单的磁盘性能testing。 这只是写下1G字节的磁盘。 我发现如果这个文件是第一个被取消链接的话,它会比截取的文件快得多。 这大约是1.5s和15s。

为什么? 我想unlink()最后一个硬链接将截断文件为0,并删除inode。 为什么fwrites与unlink()比截断更快?

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char* argv[]) { if (argc < 2) { return -1; } char buf[1024]; srand(time(0)); int i; for (i = 0; i < 1024; ++i) { buf[i] = rand(); } /* unlink(argv[1]); */ FILE* fp = fopen(argv[1], "wb+"); if (fp == NULL) { perror("fopen"); return -1; } for (i = 0; i < 1024 * 1024; ++i) { if (fwrite(buf, 1024, 1, fp) != 1) { perror("fwrite"); return -1; } } return 0; } 

当磁盘上有足够的可用空间时,删除文件的速度可能比截断速度快,文件系统可以删除文件并回收其空间。 它可以将inode标记为正在删除,并在后台或稍后删除该文件,并几乎立即创建一个新的inode,为新写入做好准备。