ftruncate trunc файл в c не может найти эту функцию - PullRequest
2 голосов
/ 17 мая 2009

Я хочу обрезать файл чем-то вроде setsizeof () с FILE * Я разрабатываю Windows 2003 по сравнению с

#include <unistd.h> there's no such lib

как я могу это сделать freopen () обрезает все данные, которые не записывает, получая ошибку EINVAL некоторая помощь ?????

Ответы [ 2 ]

3 голосов
/ 17 мая 2009

Функция _chsize делает работу лучше, она получает размер файла и меняет значение на

2 голосов
/ 17 мая 2009

В стандарте C имеется ряд (примерно 20) заголовочных файлов, и unistd не является одним из них (это заголовок POSIX / UNIX95 / UNIX98). Таким образом, поставщик не обязан предоставлять его. Ни C89, ни C99 не имеют unistd как один из обязательных заголовочных файлов.

Самый простой способ обрезать файл - это снова открыть его в режиме записи (при условии, что у вас есть имя файла).

fclose (fh);
fh = fopen ("file_name", "w");

Если у вас есть только дескриптор файла, вам нужно использовать freopen(). Вы получите EINVAL, только если режим неправильный. Вы не можете изменить режим, кроме как в соответствии со следующей таблицей:

r        -> r
w a      -> a w
r+ w+ a+ -> any mode

Подробнее см. man freopen .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...