Обрезать файл в заданной позиции
#include <sys/types.h>#include <unistd.h>off_t ltrunc( int fildes,off_t offset,int whence );
<unistd.h>
): libc
Функция ltrunc() пытается обрезать файл в указанной позиции. Файл, на который ссылается дескриптор открытого файла fildes, должен быть открыт O_WRONLY
или O_RDWR
. Точка обрезания файла вычисляется с использованием значения смещения offset как относительного смещения offset от позиции файла, определяемого значением аргумента whence. Значение смещения offset может быть отрицательным, хотя отрицательная точка обрезания файла (перед началом файла) является ошибкой.
Функция ltrunc() игнорирует многопоточную синхронизацию блокировки, которая могла быть установлена с помощью fcntl(). |
Вычисленная точка обрезания файла, если она находится в пределах существующих границ файла, определяет новый размер файла; все данные после точки обрезания файла больше не существуют. Если точка обрезания файла находится за существующим концом файла, размер файла не изменяется. Ошибка возникает при попытке обрезания файла до начала файла (то есть отрицательной точки обрезания файла).
Текущая позиция поиска не изменяется этой функцией ни при каких обстоятельствах, включая случай, когда текущая позиция поиска находится за точкой обрезания файла. |
После успешного завершения эта функция возвращает новый размер файла. Если была указана точка обрезания файла за пределами существующего конца файла, возвращается нынешний размер файла, и файл остается неизменным. В противном случае ltrunc() возвращает значение -1
и устанавливает номер ошибки errno для указания ошибки. В случае ошибки размер файла не изменится.
#include <stdio.h>#include <fcntl.h>#include <sys/types.h>#include <unistd.h>char buffer[1000];int main( void ){int fd, stat;fd = open( "test", O_CREAT | O_RDWR, 0666 );if ( fd == -1 ){fprintf( stderr, "Open error\n" );exit( -1 );}/* Create a 1000-byte file */write( fd, buffer, 1000 );/* Seek back to offset 500 and truncate the file */if ( ltrunc( fd, 500, SEEK_SET ) == -1 ){fprintf( stderr, "ltrunc error\n" );exit( -1 );}close( fd );fd = open( "test", O_CREAT | O_RDWR, 0666 );printf( "File size = %ld\n", lseek( fd, 0, SEEK_END ) );close( fd );return (0);}
ЗОСРВ «Нейтрино»
Функция ltrunc() не переносима и не должна использоваться в новом коде. Вместо этого рекомендуется использовать ftruncate().
Предыдущий раздел: Описание API системной библиотеки