Reputation: 2861
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 polling 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.
Upvotes: 4
Views: 860
Reputation: 2690
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.
Upvotes: 8
Reputation: 147
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.
Upvotes: 0