Plan 9 from Bell Labs’s /usr/web/sources/contrib/maht/limbo/doinotify.b

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.



implement DoInotify;

include "sys.m";
	sys : Sys;

include "draw.m";
	draw : Draw;

include "bufio.m";
	bufio : Bufio;
	Iobuf : import bufio;

include "inotify.m";
	inotify :Inotify;
	Event, Watcher : import inotify;


DoInotify: module
{
	init: fn(ctxt: ref Draw->Context, args: list of string);
};

debug : con 1;
err_chan : chan of string;

logger()
{
	txt : string;
	while((txt = <- err_chan) != nil) {
		if(debug)
			sys->print("%s\n", txt);
	}
	if(debug)
		sys->print("Closing\n");
}

init(nil: ref Draw->Context, nil: list of string)
{
	sys = load Sys Sys->PATH;
	inotify = load Inotify "inotify.dis";
	
	err_chan = chan of string;

	spawn logger();

	w := inotify->new_watcher("/tmp", err_chan);

	e : ref Event;
	e = <- w.events;

	while(e != nil) {
		if(e.matches(Inotify->ACCESS))
			sys->print("Access %s %s\n", e.filename, e.target);
		if(e.matches(Inotify->CREATE))
			sys->print("Create %s %s\n", e.filename, e.target);
		if(e.matches(Inotify->DELETE))
			sys->print("Delete %s %s\n", e.filename, e.target);
		if(e.matches(Inotify->MODIFY))
			sys->print("Modify %s %s\n", e.filename, e.target);
		if(e.matches(Inotify->ISDIR))
			sys->print("ISDIR %s %s\n", e.filename, e.target);
		if(e.target == "exit")
			w.kill();
		e = <- w.events;
	}
}


# Putall rm *.dis ; mk ; do; sleep 3; echo > exit && rm exit	# kill Do; kill Inotify

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.