Новая строка при записи в файл в C?

В настоящее время я пишу программу для Linux, чтобы получить текущее использование ЦП из / proc / stat и напечатать в .txt-файле. Однако, при написании файла, я не могу распечатать новую строку, а вывод печатает поверх старого …

Я хотел бы напечатать новую строку под предыдущей, но использование символов "\n" или "\r" не сработало.

Код находится здесь:

 #include  #include  #include  void checker(); int main(){ long double a[4], b[4], loadavg; FILE *fp; char dump[50]; for(;;){ fp = fopen("/proc/stat","r"); checker(); fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]); fclose(fp); sleep(1); fp = fopen("/proc/stat","r"); checker(); fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]); fclose(fp); fp = fopen("CPU_log.txt", "w"); checker(); loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3])); fprintf(fp, "Current CPU Usage is: %Lf\r\n", loadavg); fclose(fp); } return 0; } void checker(){ FILE *fp; if (fp == NULL){ printf("Error opening file!\n"); exit(1); } } 

Кажется, что вам нужно добавлять новые данные в существующий файл (т. Е. Не перезаписывать), а не создавать пустой файл каждый раз. Попробуй это:

 fp = fopen("CPU_log.txt", "a"); 

Второй аргумент "a" означает «добавить»:

Откройте файл для вывода в конце файла. Операции вывода всегда записывают данные в конце файла, расширяя его. Операции перестановки (fseek, fsetpos, rewind) игнорируются. Файл создается, если он не существует.

Также кажется reasanoble, чтобы изменить вашу функцию checker :

 void checker(FILE *fp) { if (fp == NULL){ perror("The following error occurred"); exit(EXIT_FAILURE); } } 

Внутри цикла, вы открываете файл CPU_log.txt в режиме записи.

 fp = fopen("CPU_log.txt", "w"); 

Режим w обрезает файл до нулевой длины или создает файл для записи.

Откройте файл в режиме добавления. Это не будет перезаписывать содержимое.

 fp = fopen("CPU_log.txt", "a"); 

Вам нужно открыть файлы за пределами for () – Loop, в противном случае ваш файл будет перезаписан непрерывно. Или вам нужно открыть файл «a» вместо «w», который добавляется к файлу, а не отбрасывает все.

Кроме того, что означает% Lf? (Должно быть% f!)