这段时间在做服务器性能监控的程序,主要是从/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读,则没有问题。
本文探讨了在使用标准C库中的fscanf函数进行文件读取时遇到的问题,即文件内容在两次读取间未发生变化,即使在此期间手动修改了文件。通过对比使用read函数的情况,发现了标准IO与直接IO之间的区别。
1465

被折叠的 条评论
为什么被折叠?



