Обрезать файл до заданной длины
#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 системной библиотеки