用C写入文件时要换行? [英] New line while writing to file in C?
问题描述
我目前正在Linux上编写程序,以从/proc/stat获取当前的CPU使用率并打印到.txt文件中.但是,在写入文件时,我无法打印新行,并且输出将覆盖旧行...
I am currently writting a program on Linux to get the current CPU usage from /proc/stat and print in to a .txt file. However, whilst writting to the file, I am unable to print a new line, and the output prints OVER the old one...
我想在上一行下打印新行,但是使用"\n"
或"\r"
字符无效.
I would like to print the new line under the previous one, but using the "\n"
or "\r"
characters didn't work.
代码在这里:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
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);
}
}
推荐答案
似乎您需要向现有文件中添加新数据(即不要覆盖),而不是每次都创建空文件.试试这个:
It seems that you need to append new data to existent file (i.e. do not overwrite) instead of creating of empty file each time. Try this:
fp = fopen("CPU_log.txt", "a");
第二个参数"a"
表示附加":
Second argument "a"
means "append":
打开文件以在文件末尾输出.输出操作始终将数据写入文件的末尾,然后对其进行扩展.重新定位操作(fseek,fsetpos,rewind)将被忽略.如果该文件不存在,则会创建该文件.
Open file for output at the end of a file. Output operations always write data at the end of the file, expanding it. Repositioning operations (fseek, fsetpos, rewind) are ignored. The file is created if it does not exist.
另外,修改功能checker
似乎是可行的:
Also it seems reasanoble to modify your function checker
:
void checker(FILE *fp) {
if (fp == NULL){
perror("The following error occurred");
exit(EXIT_FAILURE);
}
}
这篇关于用C写入文件时要换行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!