Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 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.

like image 978
vinodkone Avatar asked Jan 19 '23 01:01

vinodkone


2 Answers

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.

like image 87
Gustavo Giráldez Avatar answered Jan 29 '23 09:01

Gustavo Giráldez


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

like image 39
ninjalj Avatar answered Jan 29 '23 09:01

ninjalj