Thanks Marc, I had the non-blocking stuff in there and it almost worked. The problem I had is in that the EV::loop does not return after the timeout kicks in unless I send another entry to /var/log/messages. Have no idea where things get stuck.
I tried all kinds of stuff in $timeout # $watcher->stop; # $timeout->stop; # EV::unloop EV::UNLOOP_ALL; # $watcher->invoke; # EV::unloop; # close $fh; Nothing did what I was hoping for. I assume the forked tail is dangling somewhere. Lars On Thursday, May 20, 2010 at 6:17 PM, Marc Lehmann <[email protected]> wrote: >On Thu, May 20, 2010 at 05:54:05PM -0600, Lars Holowko <[email protected]> wrote: >> my $fn = "tail -f /var/log/messages"; >> open my $fh, '-|', $fn or croak "Can't open $fn: $::OS_ERROR"; >starting an external process per file is not quite low-overhead, but >certainly easy to implement... >> my $watcher = EV::io $fh, EV::READ, sub { >> >> my ($watcher, $revents) = @_; >> >> warn "yeah, /var/log/messages should now be readable without >> blocking!\n"; >No, not at all - you confuse events and non-blocking I/O - the fact that >some data is available does not suddenly make I/O non-blocking. For >that, you need to set your file descriptor to nonblocking (e.g. with >AnyEvent::Util::fh_nonblocking or a platform-specific ioctl/fcntl). > >However, note that: >> print <$fh>; >Making the fd non-blockign doesn't mean that you get full lines - for that, >you have to do your own buffering. >Either you do that, or you use some wrapper, scuh as AnyEvent::Handle >(note, this is untested, but should get you going): > my $hdl = new AnyEvent::Handle > fh => $fh, > on_error => sub { ... }, > on_read => sub { > my ($hdl) = @_; > > $hdl->push_read (line => sub { > my ($hdl, $line) = @_; > say "some data: $line"; > }); > }; ---------------------------------------------------------------------- The information contained in this transmission may be confidential. Any disclosure, copying, or further distribution of confidential information is not permitted unless such privilege is explicitly granted in writing by Quantum. Quantum reserves the right to have electronic communications, including email and attachments, sent across its networks filtered through anti virus and spam software programs and retain such messages in order to comply with applicable data security and retention requirements. Quantum is not responsible for the proper and complete transmission of the substance of this communication or for any delay in its receipt. _______________________________________________ libev mailing list [email protected] http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev
