truncate()

Обрезать файл до заданной длины

Прототип:

#include <unistd.h>
int truncate( const char *path,
off_t length );

Аргументы:

path
Путь к файлу, размер которого необходимо изменить.
length
Новая длина файла.

Библиотека:

libc

Описание:

Функция truncate() изменяет размер обычного файла path до length байт.

Влияние truncate() на другие типы файлов не определено. Если файл ранее был больше длины length, дополнительные данные будут потеряны. Если ранее он был короче длины length, байты между старой и новой длинами считываются как нули. У процесса должно быть разрешение на запись файла.

Если запрос приведет к тому, что размер файла превысит предельный размер файла для процесса, запрос завершится неудачно, и реализация сгенерирует сигнал SIGXFSZ для процесса.

Эта функция не изменяет смещение в файле для любых открытых файловых дескрипторов, связанных с файлом. При успешном завершении, если размер файла изменен, truncate() помечает для обновления поля st_ctime и st_mtime файла, а если файл является обычным файлом, биты S_ISSUED и S_SGID режима файла могут быть сброшены.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EACCES
Компонент префикса пути отклоняет разрешение на поиск или недостаточно прав для записи в этот файл.
EFAULT
Аргумент path указывает на область памяти, находящуюся вне адресного пространства процесса.
EFBIG
Аргумент length больше, чем максимальный размер файла.
EINTR
Во время обработки был получен сигнал.
EINVAL
Аргумент length некорректен, либо аргумент path не указывает на обычный файл.
EIO
Ошибка ввода-вывода при чтении или записи в файловую систему.
EISDIR
Указанный файл является директорией.
ELOOP
Слишком много символических ссылок при разрешении пути path.
EMFILE
Достигнут предел количества файловых дескрипторов, доступных процессу.
EMULTIHOP
Компоненты пути path требуют перехода к нескольким удалённым машинам, а тип файловой системы не позволяет это сделать.
ENAMETOOLONG
Длина переданного имени пути превышает PATH_MAX байт, или длина компоненты пути превышает NAME_MAX байт.
ENFILE
Не удалось выделить дополнительное место для таблицы системных файлов.
ENOENT
Компонент пути path не указывает на существующий файл или путь или является пустой строкой.
ENOLINK
Аргумент path указывает на удалённую машину, а соединение с этой машиной более неактивно.
ENOTDIR
Компонент пути path не является директорией.
EROFS
Указанный файл находится в файловой системе, доступной только для чтения.

Классификация:

POSIX 1003.1 X/Open Systems Interfaces Extension

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

chmod(), fcntl(), ftruncate(), open()




Предыдущий раздел: Описание API системной библиотеки