plumpmath / inotify Goto Github PK
View Code? Open in Web Editor NEWThis project forked from massemanet/inotify
erlang binding to inotify
License: Other
This project forked from massemanet/inotify
erlang binding to inotify
License: Other
Introduction ------------ Inotify is on erlang port for the Linux inotify API allowing one to monitor changes to files and directory in the filesystem. Installation ------------ If building from git; aclocal ; autoconf ; automake --add-missing ; ./configure ; make If building from the tar ball; ./configure ; make This will build in-tree (i.e. the binaries/beams will be in the src directory). If you want to install, do; ./configure --prefix=/usr ; make ; sudo make install Prefix /usr will install in the OTP installation directory on a debian/ubuntu. Adjust to something fitting. To test, execute; make test. This will run inotify:test() and you should see output similar to; $ make test erl -noshell -eval "inotify:test(), erlang:halt()." Simplistic test/example Start... Open the port and receive a file descriptor... F = 3 list..L = [3] Watch for any changes in a Directory... W = 1 launch listener.... start playing with the file... attempt to create file "../test/file" listener got: {event,1,[create],0,[102,105,108,101,0,0,0,0,0,0,0,0,0,0,0,0]} listener got: {event,1,[create],0,[102,105,108,101,0,0,0,0,0,0,0,0,0,0,0,0]} write a message to file listener got: {event,1,[modify],0,[102,105,108,101,0,0,0,0,0,0,0,0,0,0,0,0]} close the file listener got: {event,1, [close_write], 0, [102,105,108,101,0,0,0,0,0,0,0,0,0,0,0,0]} delete file "../test/file" listener got: {event,1,[delete],0,[102,105,108,101,0,0,0,0,0,0,0,0,0,0,0,0]} end playing with file stop the listener... stop inotify controller... test is now concluded The test creates a file in the test directory, writes to it and then deletes it. Using inoteefy -------------- inoteefy associates a callback fun with a file. inoteefy:watch(File,Fun) -> ok inoteefy:unwatch(File) -> ok If File is watched, Fun/1 will be called everytime File is touched. The argument to Fun will look like; {File,[Mask],Cookie,Name} Mask - atom() - see inotify docs (man inotify). Cookie - integer() - see inotify docs (man inotify). Only used for dirs. Name - string() - see inotify docs (man inotify). Only used for dirs. Example; (doozy@dixie)19> inoteefy:watch("/home/masse/.emacs",fun(X)->io:fwrite("~p~n",[X])end). ok <changing the .emacs file> {"/home/masse/.emacs",[modify],0,[]} {"/home/masse/.emacs",[open],0,[]} {"/home/masse/.emacs",[modify],0,[]} {"/home/masse/.emacs",[modify],0,[]} {"/home/masse/.emacs",[close_write],0,[]} {"/home/masse/.emacs",[modify],0,[]} {"/home/masse/.emacs",[open],0,[]} {"/home/masse/.emacs",[modify],0,[]} {"/home/masse/.emacs",[close_write],0,[]} (doozy@dixie)20> inoteefy:unwatch("/home/masse/.emacs"). ok Using inotify ------------- This is the erlang program inotify.erl, not the underlying linux syscall. For an example on how to use inotify take a look at the function test/0 in inotify.erl. The listener process gets a message of the form {event, WatchDescriptor, EventList, Cookie, Name} where WatchDescriptor is the watch descriptor which caused the event EventList is one or more event which is/are the reason for the message these include, access, attrib, close_write, close_nowrite, create, delete, delete_self, modify, move_self, moved_from, moved_to, open Cookie Name is the filesystem name relative to the base which caused the event. It the example test above the list [102,105,108,101,0,0,0,0,0,0,0,0,0,0,0,0] is the string "file" zero padded which is the file referred to by the event relative to the test directory with the attached inotify watch. License ------- In short, you can do anything you want with the code including using it as part of you plan for world domination (if your successful can I have one of the nicer countries please). No responsiblity it taken for the fitness of the any purpose, etc, etc. The only thing I ask is that if you find a bug and fix send me the patch. Likewise, feature suggestions and patches are welcome. TODO ---- * add support for multiple controller functions * Write some documentation! Release History --------------- 20100206 version 0.3 on github 20090221 release 0.2 bug fix 20080929 initial release version 0.1
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.