Я получаю странные результаты, пытаясь записать данные в файлы в C.<br/>
. Я думал, что fclose()
закрывает *FILE
и flushes
данные из своего буфера в file.<br/>
Но по какой-то причине он только иногда сбрасывает данные в моей программе, и это не так. не делай этого в другое время.
Например: я запускаю этот код, и в моем файле я вижу две строки. (Отлично, именно то, что я хочу)
Но затем, когда я запускаю код следующие 4 раза, он ничего не меняет в моем файле. А потом, когда я запускаю ее в другой раз, внезапно появляются 10 дополнительных строк (8 с последнего запуска программы и 2 с этого момента)
(Эти 4 раза просто пример, иногда это 5, 8, 10 или даже всего 2 раза, прежде чем я увижу вывод)
Я правда этого не понимаю? Разве данные не должны быть видны после каждого запуска программы? Где вообще хранится этот буфер между разными запусками программы, потому что программа каждый раз завершается, поэтому память освобождается, Правильно?
(Кстати, я также пробовал fflush(fd)
до и после fclose(), но это не решило проблему)
#include <stdio.h>
int main(int argc, char const *argv[]) {
FILE * fd;
fd = fopen("test_file.txt", "a");
fprintf(fd, "String 1\n");
fprintf(fd, "String 2\n");
fclose(fd);
return 0;
}
if (fclose(fd)) perror("fclose");
. Если ошибки нет,fclose()
включает эквивалентfflush()
: см. C11 7.21.5.1. - person pmg   schedule 02.07.2020fprintf()
могут быть не записаны в файл до тех пор, пока не будет вызванfclose()
, и чтоfclose()
может завершиться ошибкой после того, как все другие ваши вызовы оказались успешными, поскольку данные были буферизованы, а не фактически писалось до тех пор, покаfclose()
не сбросил его. Если ваш диск переполнится или возникнут другие проблемы, все предыдущие успешные вызовыfwrite()
могут быть стерты. - person Andrew Henle   schedule 02.07.2020fclose
, также вызовfclose
не гарантирует, что данные уже находятся на диске. см. мой ответ ниже. благодарю вас. - person nor   schedule 02.07.2020tail -f test_file.txt
в другом терминале, я каждый раз получаю дополнительные строки. Я согласен с другими, проблема, скорее всего, в том, что вы используете для просмотра файла. - person Zan Lynx   schedule 02.07.2020