Linux下的fallocate操作

1. fallocate和posix

fallocate这货是Linux特有的系统调用,并不符合POSIX标准,为了兼容posix标准的fallocate,glibc专门做了一个posix_fallocate函数,看名字就知道这个函数是对应posix标准实现的。然而它和我们要说的fallocate没有任何关系,虽然它从功能上好像是实现的fallocate的基本功能,但是本质上它们是两回事。fallocate是文件系统层提供的实现,它的很多特性必须得到文件系统底层的支持。而posix_fallocate是在上层的实现,就算文件系统底层不支持任何fallocate的操作,你也可以使用posix_fallocate。但是此时我更愿意用dd。。。

2. fallocate上的五种mode

先来看一下fallocate的定义:

int fallocate(int fd, int mode, off_t offset, off_t len);

很显然fallocate就是对fd所指向的文件的offset+len区间做mode指定的操作。那么这个mode就是我们要重点说的。事先声明,现在是2016-04-01,目前最新的Linux版本是Linus刚刚合并完成的Linux-v4.6-rc1。截至目前fallocate在不同的文件系统上共支持五种不同类型的操作,一一列举如下:

 

I. Allocating disk space

 

这是默认的操作,对应mode等于0。它所作的工作是如果分配从offset开始到offset+len的一段空间,这个是真的分配磁盘空间,不是hole,新分配的空间以0填充数据。当然这个操作一般在offset+len大于现有文件长度时才会起到增加文件数据空间的作用。

一般情况下新增加空间后文件的size也会随着调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值