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 описаны следующие дополнительные коды ошибок
truncate:
EMFILE, EMULTIHP, ENFILE, ENOLINK. Также в SVr4
описан дополнительные код ошибки
ftruncate:
EAGAIN.
ЗАМЕЧАНИЯ
Выше приведено описание для систем, соответствующих XSI.
Для систем, не соответствующих XSI, стандарт POSIX в случаях,
когда при вызове функции
ftruncate
аргумент
length
превышает длину файла, позволяет либо возвращать ошибку, либо увеличивать
длину файла (обратите внимание, что
truncate
в таких окружениях не описана вообще). (Большинство UNIX-подобных систем
следует требованиям XSI.)