fallocate
1. fallocate.2.man
Manpage of FALLOCATE
FALLOCATE
Section: Руководство программиста Linux (2)Updated: 2010-09-10
Index Return to Main Contents
ИМЯ
fallocate - управляет пространством файлаОБЗОР
#define _GNU_SOURCE /* Смотрите feature_test_macros(7) */ #include <fcntl.h> int fallocate(int fd, int mode, off_t offset, off_t len);
ОПИСАНИЕ
Это непереносимый системный вызов, существующий только в Linux. В POSIX.1 есть переносимый метод, обеспечивающий выделения пространства под файл (см. posix_fallocate()).fallocate() позволяет вызывающему напрямую управлять выделенным дисковым пространством файла, на который указывает fd, определённого байтового диапазона, начинающегося с offset и имеющего длину len байт.
В аргументе mode задаётся операция, выполняемая над указанным диапазоном. В настоящее время для mode поддерживается только один флаг:
- FALLOC_FL_KEEP_SIZE
- Этот флаг указывает выделить и инициализировать нулями дисковое пространство в диапазоне, начинающемся с offset и длиной len. После успешного вызова последующая запись в этот диапазон гарантировано выполнится, а не прервётся из-за нехватки дискового пространства. Предварительное определение обнулённых блоков за концом файла полезно для оптимизации добавления данных. Предварительное определение блоков не изменит размер файла (согласно stat(2)), даже если они меньше чем offset+len.
Если флаг FALLOC_FL_KEEP_SIZE в mode не указан, то поведение по умолчанию почти то же, что и с заданным флагом. Разница в том, что при успешном выполнении размер файла будет изменён, если offset + len больше чем размер файла. Такое поведение по умолчанию очень напоминает поведение библиотечной функции posix_fallocate(3), и служит для оптимальной реализации этой функции.
Так как выделение выполняется кусками размером с блок, fallocate() может выделить больший диапазон, чем было указано.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении функции fallocate() возвращается 0. В случае ошибки возвращается -1.ОШИБКИ
- EBADF
- fd не является допустимым файловым дескриптором или не открыт на запись.
- EFBIG
- Сумма offset+len превышает максимальный размер файла.
- EINTR
- При выполнении поступил сигнал.
- EINVAL
- offset меньше 0, или len меньше или равна 0.
- EIO
- При чтении или записи в файловую систему произошла ошибка ввода-вывода.
- ENODEV
- fd не указывает на обычный файл или каталог. (Если fd --- канал или FIFO, то возникнет другая ошибка.)
- ENOSPC
- Недостаточно дискового пространства на устройстве, на котором расположен файл, указанный в fd.
- ENOSYS
- Файловая система с файлом, на который указывает fd, не поддерживает данную операцию.
- EOPNOTSUPP
- Аргумент mode не поддерживается файловой системой, на которой расположен файл, указанный в fd.
ВЕРСИИ
fallocate() доступен в Linux начиная с ядра 2.6.23. Поддержка в glibc добавлена в версии 2.10.СООТВЕТСТВИЕ СТАНДАРТАМ
fallocate() есть только в Linux.СМОТРИТЕ ТАКЖЕ
ftruncate(2), posix_fadvise(3), posix_fallocate(3)
Index
This document was created by man2html using the manual pages.
Time: 17:41:38 GMT, May 11, 2012
