这段时间在做服务器性能监控的程序,主要是从/proc下的文件读出Linux的性能计数器。一开始用标准C中的fscanf读,写好后程序跑了一段时间,数值一直不变,用GDB调试了一下,发现,fscanf调用后,文件内容被修改,在调用fscanf时,内容完全没有被更改。与fflush无关,因为fflush只跟写缓冲有关。为了排除其他问题,我写了一个小程序,看看是否真的是标准IO的问题。
#include<stdio.h>
void main() {
FILE *fp = fopen("data", "r");
int ret = 0;
fscanf(fp, "%d", &ret);
printf("1st read : %d\n", ret);
fflush(fp);
sleep(10);
fscanf(fp, "%d", &ret);
printf("2nd read : %d\n", ret);
}
在程序睡10s的过程中,修改文件的内容,再读出来,发现内容还是没改动,改成用read读,则没有问题。