posix_fallocate -
выделяет
пространство
для файла
Standard C library (
libc,
-lc)
#include <fcntl.h>
int posix_fallocate(int fd, off_t offset, off_t len);
posix_fallocate():
_POSIX_C_SOURCE >= 200112L
Функция
posix_fallocate()
гарантирует,
что
дисковое
пространство,
выделено
для файла,
на который
указывает
файловый
дескриптор
fd, для байт в
диапазоне
начиная с
offset и длиной
len байт.
После
успешного
выполнения
posix_fallocate()
последующие
операции
записи в
байты
указанного
диапазона
гарантировано
не
закончатся
ошибкой
из-за
нехватки
места на
диске.
Если
размер
файла
меньше чем
offset+
len, то файл
увеличится
до своего
размера; в
противном
случае
размер
файла
останется
не
изменённым.
При
успешном
выполнении
функции
posix_fallocate()
возвращается
0, а при
ошибке
возвращается
её номер.
Заметим,
что
errno не
изменяется.
- EBADF
-
fd не
является
допустимым
файловым
дескриптором
или не
открыт на
запись.
- EFBIG
- Сумма offset+len
превышает
максимальный
размер
файла.
- EINTR
- При
выполнении
поступил
сигнал.
- EINVAL
- Значение
offset меньше,
или len
меньше или
равно 0, или
используемая
файловая
система,
хранящая
файл, не
поддерживает
операцию.
- ENODEV
- Дескриптор
fd не
указывает
на обычный
файл.
- ENOSPC
- Недостаточно
дискового
пространства
на
устройстве,
на котором
расположен
файл,
указанный
в fd.
- EOPNOTSUPP
- The filesystem containing the file referred to by fd
does not support this operation. This error code can be returned by C
libraries that don't perform the emulation shown in NOTES, such as musl
libc.
- ESPIPE
- Значение
fd
указывает
на канал.
Функция
posix_fallocate()
доступна в
glibc начиная с
версии 2.1.94.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
posix_fallocate() |
Безвредность
в нитях |
MT-Safe (но
смотрите
ДЕФЕКТЫ) |
POSIX.1-2001.
В POSIX.1-2008 указано,
что
реализация
должна
возвращать
ошибку
EINVAL,
если
len
равно 0 или
offset меньше 0. В
POSIX.1-2001 сказано,
что
реализация
должна
возвращать
ошибку
EINVAL,
если
len
меньше 0 или
offset меньше 0, и
может
возвращать
ошибку,
если
len
равно 0.
В glibc функция
posix_fallocate()
реализована
с помощью
системного
вызова
fallocate(2),
который
является
нитебезопасным.
Если
подлежащая
файловая
система не
поддерживает
fallocate(2), то
операция
эмулируется
со
следующими
оговорками:
- •
- Эмуляция
не
считается
эффективной.
- •
- Существует
состязательность,
где
одновременные
записи из
другой
нити или
процесса
могут быть
перезаписаны
null байтами.
- •
- Существует
состязательность,
где
одновременное
увеличение
размера
файла из
другой
нити или
процесса
могут
привести к
тому, что
размер
файл будет
меньше
ожидаемого.
- •
- Если fd
был открыт
с флагом O_APPEND
или O_WRONLY, то
функция
завершается
ошибкой
EBADF.
Таким
образом,
эмуляция
не
является
нитебезопасной.
В Linux
приложения
могут
использовать
fallocate(2), если для
них
неприемлемы
оговорки
эмуляции. В
общем,
функцию
рекомендуется
использовать
только,
если
приложение
планирует
завершить
операцию,
если
возвращается
EOPNOTSUPP, в
противном
случае в
приложении
нужно
реализовать
обходное
решение
проблем
эмуляции,
предоставляемой
glibc.
fallocate(1),
fallocate(2),
lseek(2),
posix_fadvise(2)
Русский
перевод
этой
страницы
руководства
был сделан
Alexey, Azamat Hackimov <
[email protected]>, kogamatranslator49
<
[email protected]>, Kogan, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]