Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Using Linux::Inotify2 with POE

by jfroebe (Parson)
on Oct 07, 2008 at 15:02 UTC ( #715806=sourcecode: print w/ replies, xml ) Need Help??

Category: Utility Scripts
Author/Contact Info Jason L. Froebe
Description: The examples in Linux::Inotify2 are for Event, Glib::IO and a manual loop. With the help of rcaputo, tye and Animator, I was able to get Linux::Inotify2 to work with POE. :)
#!/usr/bin/perl

use strict;
use warnings;

use Linux::Inotify2;
use POE;

$|++;

POE::Session->create
  ( inline_states =>
      { _start => sub {
            $_[KERNEL]->alias_set('notify');
            $_[HEAP]{inotify} = new Linux::Inotify2
              or die "Unable to create new inotify object: $!";

            $_[HEAP]{inotify}->watch("/tmp/j", IN_CLOSE_WRITE, $_[SESS
+ION]->postback("watch_hdlr"))
              or die "Unable to watch dir: $!";

            my $inotify_FH;
            open $inotify_FH, "<&=" . $_[HEAP]{inotify}->fileno or die
+ "Can't fdopen: $!\n";
            $_[KERNEL]->select_read( $inotify_FH, "inotify_poll" );
        },
        inotify_poll => sub {
          $_[HEAP]{inotify}->poll;
        },
        watch_hdlr => \&watch_hdlr,
      },
  );

sub watch_hdlr {
  my $event = $_[ARG1][0];

  my $name = $event->fullname;

  print "$name was accessed\n" if $event->IN_ACCESS;
  print "$name is no longer mounted\n" if $event->IN_UNMOUNT;
  print "$name is gone\n" if $event->IN_IGNORED;
  print "$name is new\n" if $event->IN_CLOSE_WRITE;
  print "events for $name have been lost\n" if $event->IN_Q_OVERFLOW;
}

POE::Kernel->run();

exit 0;

Create a file using dd:

jason@jfroebe-laptop:~$ dd if=/dev/zero of=/tmp/j/p bs=1M count=2
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.112971 s, 18.6 MB/s
jason@jfroebe-laptop:~$ dd if=/dev/zero of=/tmp/j/p bs=1M count=2
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.113488 s, 18.5 MB/s

Output:

jason@jfroebe-laptop:~/bin$ ./test_poe_linux_inotify.pl
/tmp/j/p is new
/tmp/j/p is new

Comment on Using Linux::Inotify2 with POE
Select or Download Code

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://715806]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2015-07-06 04:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (70 votes), past polls