POSIX_FALLOCATE - Linux手册页

时间:2019-08-20 18:00:59  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

posix_fallocate-分配文件空间

语法

#include <fcntl.h>

int posix_fallocate(int fd, off_t offset, off_t len);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

posix_fallocate():

_POSIX_C_SOURCE>= 200112L

说明

函数posix_fallocate()确保为文件描述符fd所引用的文件分配磁盘空间,该文件空间是从offset开始到len字节范围内的字节。成功调用posix_fallocate()之后,可以保证随后由于缺少磁盘空间而对指定范围内的字节进行写操作不会失败。

如果文件的大小小于offset + len,则文件增加到该大小;否则,文件大小将保持不变。

返回值

posix_fallocate()成功返回零,失败则返回错误号。请注意,未设置errno。

错误说明

EBADF
fd不是有效的文件描述符,或者未打开以进行写入。
EFBIG
offset + len超过最大文件大小。
EINTR
执行期间捕获到信号。
EINVAL
offset小于0,或len小于或等于0,或者基础文件系统不支持该操作。
ENODEV
fd不引用常规文件。
ENOSPC
设备上没有足够的空间包含fd所引用的文件。
ESPIPE
fd是指管道。

版本

posix_fallocate()自glibc 2.1.94起可用。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
posix_fallocate()Thread safetyMT-Safe (but see NOTES)

遵循规范

POSIX.1-2001。

POSIX.1-2008说,如果len为0或offset小于0,则实现应给出EINVAL错误。POSIX.1-2001说,如果len小于0或offset为,则实现应给出EINVAL错误。小于0,如果len等于零,则可能会产生错误。

备注

在glibc实现中,posix_fallocate()是使用fallocate(2)系统调用实现的,该系统调用是MT安全的。如果基础文件系统不支持fallocate(2),则使用以下警告来模拟该操作:

*
仿真效率低下。
*
在竞争情况下,来自另一个线程或进程的并发写入可能会被空字节覆盖。
*
在争用条件下,另一个线程或进程并发文件的大小增加可能会导致文件的大小小于预期。
*
如果使用O_APPEND或O_WRONLY标志打开了fd,则该函数将失败,并显示错误EBADF。

通常,该仿真不是MT安全的。在Linux上,如果应用程序不能忍受仿真警告,则可以使用fallocate(2)。通常,仅当应用程序计划在返回EOPNOTSUPP的情况下终止操作时才建议这样做,否则应用程序本身将需要进行回退,并且要解决与glibc提供的模拟相同的所有问题。

另外参见

fallocate(1),fallocate(2),lseek(2),posix_fadvise(2)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/