2 shouhaogood shouhaogood 于 2015.05.31 20:38 提问

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

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

9个回答

91program
91program   Ds   Rxr 2015.05.31 20:54
已采纳

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

chaobo_lu
chaobo_lu   2015.05.31 21:46

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

caozhy
caozhy   Ds   Rxr 2015.05.31 21:49

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

u012377333
u012377333   Rxr 2015.06.01 09:18

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

henuyx
henuyx   2015.06.01 13:02

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

你试试可以不

nswcfd
nswcfd   2015.06.01 13:23

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

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

tianyang2008
tianyang2008   2015.06.01 15:36

支持api的hook操作。

u010655288
u010655288   2015.06.02 10:19

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

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.02 11:22
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!