Under Linux amd64 and Perl 5.10.1, I'm trying to read from a pair of devices which will produce data in 16-byte blocks. (I can cat the device files - as the same user - and verify that they do this.)
Under Perl 5.8 (and an earlier i386 Linux), this worked. Now sysread() is failing with an "Invalid argument". I'm using an IO::Select thus, where @dev contains the device filenames: my $s=IO::Select->new; my @fh; foreach my $device (@dev) { my $fh; open $fh,'<',$device; binmode $fh; $s->add(\*$fh); push @fh,$fh; } while (1) { my @ready=$s->can_read(0.5); foreach my $fh (@ready) { my $data; my $y=sysread $fh,$data,16; die $! unless defined $y; # do stuff with $data } } I can change the open to sysopen $fh,$device,O_RDONLY; with no change in the result; if I add O_DIRECT, the @ready list never gets filled at all. Have I missed something important somewhere? Roger