truncate, ftruncate - укорачивает файл до указанной длины
НАЗВАНИЕtruncate, ftruncate - укорачивает файл до указанной длины
СИНТАКСИС
#include
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
ОПИСАНИЕ
Функции truncate и ftruncate устанавливают длину обычного
файла с именем path или файловым дескриптором fd в length
байт.
Если файл до этой операции был длиннее, то отсеченные
данные теряются. Если файл был короче, то он
увеличивается, а добавленная часть заполняется нулевыми
байтами.
Указатель на файл не меняется.
При использовании ftruncate файл должен быть открыт для
записи; при использовании truncate файл должен быть
доступен для записи.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешной работе функции возвращаемое значение равно
нулю. При ошибке возвращается -1, а переменной errno
присваивается номер ошибки.
КОДЫ ОШИБОК
Для truncate:
EACCES В одном из компонентов пути не разрешен поиск или
пользователь не имеет прав на запись в указанный
файл.
EFAULT Аргумент path указывает за пределы адресного
пространства процесса.
EFBIG Аргумент length больше чем максимальный размер
файла. (XSI)
EINTR Во время выполнения был перехвачен сигнал.
EINVAL Аргумент length имеет отрицательное значение или
больше, чем максимальный размер файла.
EIO При обновлении inode произошла ошибка ввода/вывода.
EISDIR Указанный файл является каталогом.
ELOOP Полное имя файла (путь) состоит из слишком большого
количества символьных ссылок.
ENAMETOOLONG
Компонент пути превышает 255 символов или весь путь
превышает 1023 символа.
ENOENT Файл не существует.
ENOTDIR
Компонент пути, использованный как каталог, в
действительности таковым не является.
EROFS Файл находится в файловой системе, предназначенной
только для чтения.
ETXTBSY
Файл является исполняемым и в настоящий момент
выполняется.
Для ftruncate используются те же коды, но ошибоки, связаны
не с path, а с fd:
EBADF Неправильный файловый дескриптор fd.
EBADF или EINVAL
Дескриптор fd не открыт для записи.
EINVAL Дескриптор fd ссылается не на обычный файл.
СООТВЕТСТВИЕ СТАНДАРТАМ
4.4BSD, SVr4 (эти системные вызовы впервые появились в BSD
4.2). POSIX 1003.1-1996 has ftruncate. POSIX 1003.1-2001
also has truncate, as an XSI extension.
В SVr4 описаны следующие дополнительные коды ошибок trun-
cate: EMFILE, EMULTIHP, ENFILE, ENOLINK. Также в SVr4
описан дополнительные код ошибки ftruncate: EAGAIN.
ЗАМЕЧАЕНИЯ
Выше приведено описание для систем, соответствующих XSI.
Для систем, несоответствующих XSI, стандарт POSIX в
случаях, когда при вызове функции ftruncate аргумент
length превышает длину файла, позволяет либо возвращать
ошибку, либо увеличивать длину файла (обратите внимание,
что truncate в таких окружениях не описана вообще).
(Большинство UNIX-подобных систем следует требованиям
XSI.)