c语言 do{}while{1}实时扫描文本,文本外部更新但是程序内部没更新

用do{ fgets() }while(1); 不断扫秒一个文本文件,一旦文本文件中含有某个关键词后程序就退出。我在外部用vi把关键词输入进文本后发现do扫描没有发现这个关键字,printf文本内容发现还是vi输入关键词以前的内容,求解?怎么能同步?多谢

文件只打开一次?如果是,你需要每次重新打开文件。建议你先用文件的属性判断,去修改时间、文件大小,在判断到文件修改后再去读文件的内容。

我用的是windows系统,如果两个程序都在打开同一个文件(即都调用了 fpen() 没有调用 fclose() )的话,那这两个程序谁都没法往里面写东西,只能读。不知道你的那个系统支持不,或许你的vi只是把内容保存在缓冲区或者临时文件,等另一个程序fclose()的时候才写进去呢。

你这样做的效率非常低。最好用api hook对产生文本的程序直接拦截,然后对新写入的数据进行判断。

如果文件没有关闭,内容是不会写入文件的

输入之后 :w保存一下
扫描到最后一行之后,sleep等待一段时间 继续扫描

你试试可以不

就像其他人说的,要么vi没有真正把修改的内容写到目标文件,要么目标文件没有重新打开。

如果是linux的,可以使用inotify/fnotify接口。

支持api的hook操作。

每次写入完后,重新打开以下!

api的hook,效率高.http://blog.163.com/xiaolonghong123123@126/blog/static/94939062201011272357605/