函数truncate、ftruncate
#include<unistd.h>
#include<sys/types.h>int truncate(const char *path,off_t length);
int ftruncate(int fd,off_t length);
truncate()和ftruncate()函数导致一个名称为path或者被文件描述符fd引用的常规文件被截断成一个大小精为length字节的文件。如果先前的文件大于这个大小,额外的数据丢失。如果先前的文件小于当前定义的大小,那么,这个文件将会被扩展,扩展的部分将补以null,也就是‘\0’。 如果大小发生变化,那么这个st_ctime(访问时间)和st_mtime()修改时间将会被更新。使用ftruncate(),这个文件必须被打开用以写操作。使用truncate函数的文件必须能够被写。
#include <unistd.h>
#include <sys/types.h>
#include<stdlib.h>
#include <stdio.h>int main(int argc,char* argv[])
{
int size = atoi(argv[1]);printf("%d\n",size);if(truncate("demo.txt",size)!=-1){
printf("truncated!!!!\n");}return 0;
}
虽然截长到 100000个字节,文件的长度是 100000字节,但是文件占用的 block 块只有 8 个。这多余部分就是一个空洞,并不占用实际的物理磁盘。