Обрезать файл
#include <unistd.h>
int ftruncate( int fildes,
off_t length );
int ftruncate64( int fildes,
off64_t length );
- fildes
- Дескриптор файла, который необходимо обрезать.
- length
- Ожидаемая длина файла в байтах.
libc
Данные функции изменяют размер файла, на который ссылается fildes, равным length байтов. Если размер файл изначально превышает length, дополнительные данные удаляются (похоже на использование опции F_FREESP
с fcntl()). Если размер файла изначально меньше length, файл дополняется символами NUL
(похоже на использование опции F_ALLOCSP
с fcntl()).
Значение указателя позиции не изменяется во время вызова ftruncate().
В случае удачного завершения функция ftruncate() function помечает поля файла st_ctime и st_mtime для обновления. Если функция ftruncate() завершена неуспешно, файл не изменяется.
- 0
- Успешное завершение.
- -1
- Возникла ошибка. Код ошибки записан в errno.
- EBADF
- Аргумент fildes не является корректным файловым дескриптором.
- EFBIG
- Для обычного файла length больше, чем смещение, максимально возможное для файла.
- EINTR
- Во время вызова ftruncate() перехвачен сигнал.
- EINVAL
- Аргумент fildes ссылается на файл, для которого эта операция невозможна, аргумент filedes не открыт для записи или аргумент length меньше, чем минимальный размер файла для определенной файловой системы.
- EIO
- Во время чтения или записи в файловой системе возникла ошибка ввода/вывода.
- ENOSYS
- Функция ftruncate() не реализована для файловой системы, в которой находится filedes.
- ENOTSUP
- Функция ftruncate() реализована для оперделенной файловой системы, но определенные операции (
F_ALLOCSP
или F_FREESP
; смотрите fcntl()) не поддерживаются. - EROFS
- Файл расположен в файловой системе, доступной только для чтения.
ftruncate() — POSIX 1003.1; ftruncate64() — Поддержка больших файлов
- Точка остановки потока
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
mmap(), open(), shm_open(), truncate()
Предыдущий раздел: Описание API системной библиотеки