Функция как SetFileLength () в C Library для Linux

Есть ли функция в библиотеке C под Linux, которая может установить длину файла? Под Windows я знаю, что есть функция SetFileLength (). Если нет, как лучше всего укоротить файл, не удаляя и не перезаписывая его?

10.12.2008 23:30:41
2 ОТВЕТА
РЕШЕНИЕ

Вы можете использовать функцию усечения .

int truncate(const char *path, off_t length);

Со страницы руководства:

«Функции truncate () и ftruncate () приводят к усечению обычного файла с именем path или ссылкой на fd до размера байтов с точной длиной. Если файл ранее был больше этого размера, дополнительные данные будут потеряны. Если Ранее файл был короче, он расширен, а расширенная часть читается как нулевые байты "

5
10.12.2008 23:52:07
codymanix, он из POSIX, поэтому предполагается, что он будет доступен в операционных системах POSIX.
Johannes Schaub - litb 10.12.2008 23:43:08
Отметьте, что усечение не указано для систем только POSIX. это требует XSI-совместимых систем. с другой стороны, он говорит, что большинство юнитов соответствуют требованиям xsi. так что я думаю, у тебя должно быть все в порядке с усечением.
Johannes Schaub - litb 11.12.2008 00:16:57
   #include <unistd.h>
   #include <sys/types.h>

   int truncate(const char *path, off_t length);
   int ftruncate(int fd, off_t length);

Из его справочной страницы:

Функции truncate () и ftruncate () приводят к усечению обычного файла с именем path или ссылкой на fd до размера байтов с точной длиной.

Если файл ранее был больше этого размера, дополнительные данные будут потеряны. Если файл ранее был короче, он расширяется, и расширенная часть читается как нулевые байты ('\ 0').

3
10.12.2008 23:33:17