我反复使用fscanf
和阅读先前打开的文件rewind
:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
void read_opened_file(FILE *file, int *value)
{
errno = 0;
fscanf(file, "%d", value);
if (errno != 0) perror("fscanf error");
errno = 0;
rewind(file);
if (errno != 0) perror("rewind error");
}
int main(int argc, char* argv[])
{
int value = 0;
FILE *file = fopen(argv[1], "r");
errno = 0;
if (setvbuf(file, NULL, _IONBF, 0) != 0) perror("setvbuf error");
for (int i = 0; i < 10; ++i)
{
read_opened_file(file, &value);
printf("value = %d\n", value); fflush(stdout);
sleep(1);
}
fclose(file);
return 0;
}
然而,由幕后磁盘上的文件所做的任何更改gedit
,echo >
,cp
不会反映:该功能保持报告第一(缓存?)值读取(errno
未设置)。
setvbuf(file, NULL, _IONBUF, 0);
按照此处的建议进行操作时,反映了cp
和echo >
所做的更改,但是gedit
仍然没有反映出由所做的更改。fopen
,并fclose
如预期每次循环的一切。如何解决上面的代码没有 fopen
和fclose
每一次?
你不能 该gedit
程序并没有改变文件。那根本不是它的工作原理。因此,您将看不到文件的任何更改。
gedit
通过将旧文件替换为新文件来完成更改。您必须关闭旧文件并打开新文件才能查看gedit
所做的更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句