Обрезать файл, созданный с помощью `posix_fallocate` - PullRequest
0 голосов
/ 01 марта 2012

Я открыл файл для вывода в моей системе Linux с помощью моей программы на C, и у меня posix_fallocate зарезервировано для меня связка дискового пространства.

Больше, чем мне нужно, потому что я не знал, сколько мне нужно.

Наивно, я ожидал, что когда я закрою файл, он будет обрезан до места, которое мне действительно нужно.Но, конечно, жизнь не так проста.

Итак, как do Я резервирую кучу места для вывода, а затем урезаю его до того, что фактически использовал?

Спасибо!

1 Ответ

3 голосов
/ 01 марта 2012

Поведение является ожидаемым - процитировать справочную страницу posix_fallocate:

   If  the  size  of  the  file  is less than offset+len, then the file is
   increased to this size; otherwise the file size is left unchanged.

Чтобы исправить размер файла перед закрытием, извлеките ftruncate:

   The  truncate()  and ftruncate() functions cause the regular
   file named by path or referenced by fd to be truncated to  a
   size of precisely length bytes.
...