当前位置: 代码迷 >> 综合 >> 函数truncate、ftruncate
  详细解决方案

函数truncate、ftruncate

热度:52   发布时间:2024-02-26 20:14:04.0

函数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 个。这多余部分就是一个空洞,并不占用实际的物理磁盘。