linux truncate函数分析

linux truncate函数分析

一、基础知识

1.依赖头文件

#include<unistd.h>

#include<sys/types.h>

 

2.函数定义:

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函数的文件必须能够被写。

 

二、示例

1、截短测试

编写truncate.c文件如下

#include <unistd.h>

#include <sys/types.h>

#include <stdio.h>

 

int main(void)

{

    if(truncate("demo.txt",20)!=-1)

    {

        printf("truncated!!!!\n");

    }

    return 0;

}

在命令行中输入:

echo "test demo.txt truncation,it's just test,so let's look is" > demo.txt

然后编译程序truncate.c并运行

使用命令stat demo.txt查看文件状态如下:

2、截长测试

更改上诉代码为:truncate("demo.txt",100000)

使用stat demo.txt查看文件状态如下:

虽然截长到 100000个字节,文件的长度是 100000字节,但是文件占用的 block 块只有 8 个。这多余部分就是一个空洞,并不占用实际的物理磁盘。

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值