首页 > linux系统调用 ftruncate设置文件大小

linux系统调用 ftruncate设置文件大小

系统调用ftruncate可以将一个文件裁剪为指定的大小,函数描述如下:

  • 头文件:
  • 函数使用:

    int truncate(const char *path, off_t length);

    int ftruncate(int fd, off_t length);
  • 函数参数:

    可以看到两者有不同的使用方式,truncate是通过文件路径来裁剪文件大小,而ftruncate是通过文件描述符进行裁剪;
  • 返回值

    成功:0

    失败:-1
  • 权限要求:

    ftruncate要求文件被打开且拥有可写权限

    truncate要求文件拥有可写权限
  • 注意:

    如果要裁剪的文件大小大于设置的off_t length,文件大于length的数据会被裁剪掉

    如果要裁剪的文件小于设置的offt_t length,则会进行文件的扩展,并且将扩展的部分都设置为,文件的偏移地址不会发生变化

    ftruncate主要被用作POSIX共享内存对象的大小设置

函数使用:

#include 
#include 
#include 
#include 
#include 
#include #define TRUN "./test_truncate"
int main() { char *name = "test_file";//打开文件且拥有可写权限int fd = open(name,O_CREAT|O_RDWR,0666);if ( -1 == fd ) { printf("open %s failed 
",name);_exit(-1);}//通过文件描述符对文件大小进行裁剪if(ftruncate(fd,4096) != -1) { printf("ftruncate success 
");}//直接设置指定路径的文件大小if(truncate(TRUN,8192) != -1) { printf("truncate success
");}//通过fstat获取文件属性信息struct stat buf;fstat(fd,&buf);printf("stat.size is %ld 
",buf.st_size);printf("stat.inode is %ld 
",buf.st_ino);printf("stat.mode is %lo(octal) 
",(unsigned long)buf.st_mode);printf("stat.bytes is %ld 
",buf.st_blksize);close(fd);return 0;
}

更多相关:

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...

  • #include int main(int args,char ** argv) {int map[3][3]={{1,2,3},{4,5,6},{7,8,9}};int **pMap=(int **)map;printf("%d ",map);//数组的首地址printf("%d ",*(map+1));//数...

  • awk格式化使用printf函数,类似于C语言中的printf函数 比如 awk '{printf "%s ", $1}' test1 上面的方式是awk每次处理一行,然后进行替换的,如果我们想要传入多个参数,此时就需要多个格式化...

  • 【目的】   定义一个结构体类,其中的成员变量数组长度不定,根据实例化的对象指定长度,所以想到用指针实现 【现状】   指针可以指向任意长度数组,但结构体类只分配指针本身4字节长度,所以无法扩展     1 /** 2 *****************************************************...

  • 1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。 #include int main() {int a,b,c,d,e,f;for(a=1000;a<10000;a++){b=a%10;c=a/1...

  • if条件语句  非零即真   0即假 if(表达式){     //成立之后要处理的事情 }   以atm小程序为例 //判断用户选择的操作     if (operation == 1){            //输入密码         printf("输入密码 ");     }          if (operation...