首先,創建一個比較大的文件,使用dd命令。
dd if=/dev/zero of=/home/leon/tmpfile bs=1024 count=1048576
這樣就創建了一個大小為1G的文件。
執行下面的程序:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc,char **argv)
{
if(open("tempfile",O_RDWR) < 0){
fprintf(stderr,"open error");
exit(-1);
}
if(unlink("tempfile") < 0){
fprintf(stderr,"unlink error");
exit(-1);
}
printf("file unlinked\n");
sleep(15);
printf("done\n");
exit(0);
}
在程序sleep的時候,執行df命令,查看硬盤空間;
程序結束的時候,再次執行df命令,查看硬盤空間,會發現硬盤空閒資源多了1G。
而執行du命令,則不會有任何區別。
原因是:
unlink的功能是當該文件沒有被其它任何文件鏈接,並且沒有進程在訪問該文件的情況下,才將文件真正的刪除。
du和df的區別:
du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;
df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。
du是用户级程序,不考虑Meta Data(系统为自身分配的一些磁盘块)