Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1746171
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-28 13:36:17

有时我们想要通过在文件末尾删除数据来裁切一个文件。我们可以在open时使用用O_TRUNC标志来清空一个文件,这是裁切的一个特殊例子。

  1. #include <unistd.h>

  2. int truncate(const char *pathname, off_t length);

  3. int ftruncate(int filedes, off_t length);

  4. 两者成功都返回0,失败返回-1。


这两个函数把已存在的文件裁切成length字节。如果文件之前的尺寸比length大,超过length后的部分便不再能被访问了。如果之前尺寸比 length小,效果依系统而定,但遵守XSI的系统将会增加文件尺寸。如果实现没有扩展一个文件,文件旧末尾与新末尾之间会被读为0(也就是说,文件里 很可能创建了一个空洞。)


ftruncate函数是POSIX.1的一部分,truncate函数是POSIX.1功能定义在SUS的XSI扩展。


4.4BSD之前的BSD版本通过truncate只能使文件变得更小。


Solaris还包含了一个fcntl的扩展(F_FREESP),允许我们释放文件的任何部分,而不仅仅是文件末的部分。


我们在13章里的一个程序里,需要在得到文件锁之后清空一个文件时,使用ftruncate。

阅读(503) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~