В настоящее время я пишу программу для 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!)