开发者

Is there an async way of knowing a file has changed?

I would like to asynchronously monitor a file for any changes. That is I would like to have a call back (possibly from kernel) in my program when the file has been modified/deleted. The file is just a plain text file. I know one can do this using a po开发者_如何学编程lling mechanism, but I am looking for an event based solution. I read about inotify, but looks like it needs patching of my kernel.

If the solution is POSIX compliant, its even better.


Inotify was merged to the Linux kernel way back in 2005, so unless you're in a very old system, you should be able to use it out of the box.

I don't think there exists a POSIX compliant solution for this. Mac OS X has FSEvents.

Also check the man page for inotify.

EDIT:

Don't know about your constraints and/or requirements, but there is also GFileMonitor if you use Glib (the C++ binding is glibmm) and QFileSystemWatcher is you use Qt. Those are probably more cross-platform friendly.


SGI's fam has been ported to several Unixes. There's also gamin.


1)

write a device driver that creates a file called /dev/special_file.

symlink your plain text file to /dev/special file

intercept the low-level read/write operations to modify the real text file, called /path/to/text.txt, then generate the callback via signals or some type of interprocess comm to whatever process you want.

2)

have a process open your text file and just sit and wait. use select() to detect when that file has been modified, then do callback routine.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜