LINUX.ORG.RU

ftruncate


0

0

У меня в каких-то отдаленных частях мозга присутствовало воспоминание, что для truncate файла нужно вызвать write с нулевым количеством байт. На самом деле, это ни к какому результату не приводит (о чем честно написано в glibc manual), а нужно использовать функцию ftruncate.

Подскажите, про нулевое количество байт у write я что-то с чем-то путаю, или в классическом UNIX действительн должно быть так?

anonymous

> Подскажите, про нулевое количество байт у write я что-то с чем-то путаю, или в классическом UNIX действительн должно быть так?

все-таки это вы что-то путаете. тем более, что для усечения обычного (regular) файла IMHO проще открыть его через open(2) с флагом O_TRUNC. в конце-концов, ftruncate(2) все равно оперирует файловым дескриптором.

http://www.opengroup.org/onlinepubs/009695399/functions/open.html
http://www.opengroup.org/onlinepubs/009695399/functions/ftruncate.html

--- cut ---
O_TRUNC
If the file exists and is a regular file, and the file is successfully opened O_RDWR or O_WRONLY, its length shall be truncated to 0, and the mode and owner shall be unchanged. It shall have no effect on FIFO special files or terminal device files. Its effect on other file types is implementation-defined. The result of using O_TRUNC with O_RDONLY is undefined.
--- cut ---

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Про write с нулевым количеством байт понятно. Спасибо.

Мне нужее truncate не обязательно до самого нуля, а скорее shrink, т.е. уменьшение размера файла вообще, так что O_TRUNC вроде бы не мой случай.

anonymous
()
Ответ на: комментарий от anonymous

> Мне нужее truncate не обязательно до самого нуля, а скорее shrink, т.е. уменьшение размера файла вообще, так что O_TRUNC вроде бы не мой случай.

ну тогда ftruncate() самое то.

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.