four-argument version of select

C. Abney cabney at
Mon Jun 12 12:39:58 CDT 2000

On Sun, 11 Jun 2000, John R. Comeau wrote:

> However I did get the simple case to timeout as
> expected:
> 	select undef, undef, undef, 4.75;

I'm going to make an assumption, so please flame me as an ass if I'm
wrong. <g>

Are you sure you want to use 'vec' and 'select'???  That's a lot of
junk just to read a hello, world pipe.  Are you using vec because you
thought it was related to a 4 argument select in some way?

I don't really understand what they're doing: maybe you do.

I get this from perlipc:

       Signal handling is also used for timeouts in Unix,   While
       safely protected within an eval{} block, you set a signal
       handler to trap alarm signals and then schedule to have
       one delivered to you in some number of seconds.  Then try
       your blocking operation, clearing the alarm when it's done
       but not before you've exited your eval{} block.  If it
       goes off, you'll use die() to jump out of the block, much
       as you might using longjmp() or throw() in other

And a warning in perlfunc "alarm":

       If you want to use alarm() to time out a system
       call you need to use an eval()/die() pair.  You
       can't rely on the alarm causing the system call to
       fail with $! set to EINTR because Perl sets up
       signal handlers to restart system calls on some

Yeah right, whatever.

I got this code to do what (I think) you want:

#! /usr/bin/perl -w

use strict;
my ( $rin, $time );

$time = 4;

eval {
        local $SIG{ALRM} = sub { die "no output from FIFO in $time seconds"; };
	# I'm making another assumption, here:
        local $/ = 'asdfakjdfajhdflkajhdflkafhlakf;afja';

        alarm $time;
        open FIFO, "< fifo" or die "ugh: $!";
        $rin = <FIFO>;
        close FIFO;
        alarm 0;
if ($@ and $@ =~ /no output from FIFO/) { die }

print STDOUT "Got:>>" . $rin . "<<\n";

	tty1:$ ./select.plx

	tty0:$ cat hello
	tty0:$ cat hello > fifo

	tty1:$ ./select.plx

	tty1:$ ./select.plx
	no output from FIFO in 4 seconds at ./select.plx line 9.
	        ...propagated at ./select.plx line 18

HTH, Take Care,

Einstein himself said that God doesn't roll dice. But he was wrong. And
in fact, anyone who has played role-playing games knows that God
probably had to roll quite a few dice to come up with a character like
Einstein.  -- Larry Wall                                     C. Abney


The posting address is: san-diego-pm-list at

List requests should be sent to: majordomo at

If you ever want to remove yourself from this mailing list,
you can send mail to <majordomo at> with the following
command in the body of your email message:

    unsubscribe san-diego-pm-list

If you ever need to get in contact with the owner of the list,
(if you have trouble unsubscribing, or have questions about the
list itself) send email to <owner-san-diego-pm-list at> .
This is the general rule for most mailing lists when you need
to contact a human.

More information about the San-Diego-pm mailing list