GithubHelp home page GithubHelp logo

plumpmath / inotify Goto Github PK

View Code? Open in Web Editor NEW

This project forked from massemanet/inotify

0.0 0.0 0.0 297 KB

erlang binding to inotify

License: Other

Makefile 2.91% C 60.17% M4 2.50% Erlang 34.42%

inotify's Introduction

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

inotify's People

Contributors

massemanet avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.