以下是获取有关网络设备的系统信息的代码:
FILE* f = fopen(filePath, "r");
if(f == NULL)
{
perror("Error while open the file:");
return -1;
}
while(1)
{
fseek(f, 0, SEEK_SET);
char s[20];
fgets(s, 20, f);
int len = strlen(s);
s[len] = '\0';
printf(" %20s\r", s);
fflush(stdout);
sleep(2);
}
但输出保持不变,比我决定重新打开文件 每次我需要阅读它:
while(1)
{
FILE* f = fopen(filePath, "r");
if(f == NULL)
{
perror("Error while open the file:");
return -1;
}
char s[20];
fgets(s, 20, f);
int len = strlen(s);
s[len] = '\0';
char output[50];
printf(" %20s\r", s);
fflush(stdout);
sleep(2);
}
and everything worked just fine, but I don't know why?
答案 0 :(得分:3)
您需要刷新流。在fseek之前添加以下内容。
fflush(f);
fseek(f, 0, SEEK_SET);
添加fflush(f)后,它会显示更新的内容。
工作示例:
#include<stdio.h>
int main()
{
FILE* f = fopen("/tmp/testfile", "r");
if(f == NULL)
{
perror("Error while open the file:");
return -1;
}
while(1)
{
fflush(f);
fseek(f, 0, SEEK_SET);
char s[20];
fgets(s, 20, f);
int len = strlen(s);
s[len] = '\0';
printf(" %20s\r", s);
fflush(stdout);
sleep(2);
}
return 0;
}
继续修改文件并保存并观察示例程序的输出。
http://man7.org/linux/man-pages/man3/fflush.3.html
对于与可搜索文件相关的输入流(例如,磁盘文件, 但不是管道或终端),fflush()丢弃任何缓冲的数据 已从基础文件中获取,但尚未使用 通过申请。
如果要在其他操作系统上刷新流,请检查相关操作系统的手册页。
答案 1 :(得分:0)
在第3行,你有以下的coode。 FILE * f = fopen(filePath,“r”);
因为它在while(1)循环内。 当每次被调用时。 你得到的最新文件。
如果一个f只被分配一次,那么