inotify and recursion

David Eagen davideagen at mailinator.com
Thu Dec 26 19:23:00 PST 2013


Here is a first attempt. I'm sure there are much better ways to 
do this but this should at least get you going in the right 
direction.

Some of the key things to know are the undocumented (at least not 
documented on the web site) modules that are available. One of 
them contains the Linux inotify header. If you've downloaded the 
zip file from the website take a look at the src/druntime/src 
directory for these modules.

I took the example from 
http://stackoverflow.com/questions/4062806/inotify-how-to-use-it-linux 
and made some changes to get it to compile and run in D.

import core.sys.linux.sys.inotify;
import core.stdc.stdlib : malloc;
import core.sys.posix.unistd : read;

import std.stdio : writeln;
import std.string: toStringz;

enum PATH_MAX = 256;

void main()
{
     string filename="aaa";

     int inotfd = inotify_init();
     int watch_desc = inotify_add_watch(inotfd, 
toStringz(filename), IN_MODIFY);

     size_t bufsiz = inotify_event.sizeof + PATH_MAX + 1;
     inotify_event* event = cast(inotify_event *) malloc(bufsiz);

     /* wait for an event to occur */
     read(inotfd, event, event.sizeof);

     /* process event struct here */
     writeln("Received inotify event.");
}

As far as monitoring a directory, you can do that with inotify 
the same way you would a file. See 
http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/index.html 
for more a C example (Listing 1).


More information about the Digitalmars-d-learn mailing list