系统编程中的文件大小修改truncate/lseek
2016-12-07 22:27
323 查看
系统编程中的文件大小修改truncate/lseek
思维导图
文字说明
lseek函数虽然可以扩展文件大小,但是与文件系统实现机制有关,在指定偏移量超过原文件大小的时候,会产生空洞,但是最后关闭文件的时候,内核是否把这些空洞写入到磁盘区块,则不是一定的,很多时候只扩展你实际写入的字节数!并不是在指定位置处写入新字符以后就完成指定偏移量的扩展。比如你在Ubuntu14.04想用lseek(fd,1024,SEEK_END);扩展文件,在原基础上增加1024字节,接着执行write(fd,”a”,1);往文件末尾写入一个字节,实际上源文件只扩大了一个字节而不是1024个.
truncate则是按照所给参数修改文件大小。简单粗暴!推荐使用!
示例代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> int main(int argc,char ** argv) { int ret = 0; int fd ; struct stat my_st; if(argc < 2)//提示使用信息 { printf("usage : app filename!!!\n"); return -1; } printf("==========lseek=============\n"); fd = open(argv[1],O_CREAT|O_RDWR|O_APPEND,0755);//打开文件 if(fd == -1) { perror("open lseek"); return -1; } ret = lseek(fd,0,SEEK_END);//定位到文件尾得到文件大小 printf("old size = : %d\n",ret); ret = lseek(fd,1024,SEEK_END);//扩展文件--在原基础上增加1024字节--会产生空洞(在内核空间)--但是否占用磁盘大小与文件系统系统 if(ret == -1) { perror("lseek"); return -1; } printf("new size = : %d\n",ret); write(fd,"a",1);//往文件末尾写入一个字节--lseek扩展文件大小 ret = lseek(fd,0,SEEK_END);//再次获取新文件大小--Ubuntu14.04的64位系统多余的空洞不占用磁盘空间,只扩大了所写入的实际字节数 printf("new size = : %d\n",ret); close(fd); printf("==========truncate=============\n"); truncate(argv[1],2048);//truncate修改文件大小--直接将文件大小定死 ret = stat(argv[1],&my_st);//穿透软链接直接查看原始文件的状态信息 if(ret == -1) { perror("stat"); return -1; } printf("file size = : %d\n",(int)my_st.st_size); return 0; }
相关文章推荐
- 系统编程中的文件大小修改truncate/lseek
- linux系统编程:用truncate调整文件大小
- Linux文件编程之【系统调用】—— lseek()
- 修改根文件系统的大小
- linux下修改/dev/shm tmpfs文件系统大小
- 修改AIX系统上传文件大小限制
- linux下修改/dev/shm tmpfs文件系统大小
- 修改2003系统默认上传文件大小
- linux下修改/dev/shm tmpfs文件系统大小
- 文件编程-------------通过偏移指针(lseek)设置固定大小的文件
- 牛客网Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器
- linux+nginx+mysql+php系统修改文件上传大小限制
- linux下修改/dev/shm tmpfs文件系统大小
- linux下修改/dev/shm tmpfs文件系统大小
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- 修改2003系统默认上传文件大小
- CS Tip 11: 修改上传文件的大小限制
- 修改Windows注册表系统文件为宽带加速
- 如何修改ext文件系统的lable
- FCKeditor 上传修改,添加对文件的类型以及大小的限制(ASP.NET C#)