Strange Errno::EOVERFLOW error with IO#read and IO#sysread

D

Daniel Berger

Hi all,

Ruby 1.8.6 p114 (32-bit)
Solaris 10

I'm reading binary data out of the /proc/<pid>/as file on Solaris, and
I'm hitting a curious overflow error on one process in particular:

# With IO#sysread
irb(main):010:0> File.open("/proc/383/as"){ |fh| fh.sysread(4) }
Errno::EOVERFLOW: Value too large for defined data type - /proc/383/as
from (irb):10:in `sysread'
from (irb):10
from (irb):10:in `open'
from (irb):10

# With IO#read
rb(main):010:0> File.open("/proc/383/as"){ |fh| fh.read(4) }
Errno::EOVERFLOW: Value too large for defined data type - /proc/383/as
from (irb):10:in `read'
from (irb):10
from (irb):10:in `open'
from (irb):10

Where pid 383 is:

UID PID PPID C STIME TTY TIME CMD
root 383 1 0 07:14:42 ? 0:01 /usr/sfw/sbin/snmpd

This is the only pid in particular where this error occurs (out of
about 80).

Any idea what's happening here?

Thanks,

Dan
 
A

ara.t.howard

Hi all,

Ruby 1.8.6 p114 (32-bit)
Solaris 10

I'm reading binary data out of the /proc/<pid>/as file on Solaris, and
I'm hitting a curious overflow error on one process in particular:

# With IO#sysread
irb(main):010:0> File.open("/proc/383/as"){ |fh| fh.sysread(4) }
Errno::EOVERFLOW: Value too large for defined data type - /proc/383/as
from (irb):10:in `sysread'
from (irb):10
from (irb):10:in `open'
from (irb):10

# With IO#read
rb(main):010:0> File.open("/proc/383/as"){ |fh| fh.read(4) }
Errno::EOVERFLOW: Value too large for defined data type - /proc/383/as
from (irb):10:in `read'
from (irb):10
from (irb):10:in `open'
from (irb):10

Where pid 383 is:

UID PID PPID C STIME TTY TIME CMD
root 383 1 0 07:14:42 ? 0:01 /usr/sfw/sbin/snmpd

This is the only pid in particular where this error occurs (out of
about 80).

Any idea what's happening here?

Thanks,

Dan

your programs are so powerful daniel - they're overwhelming the
system! maybe if you re-write in perl the system will be able to
handle them.





;-)

a @ http://codeforpeople.com/
 
D

Daniel Berger

your programs are so powerful daniel - they're overwhelming the
system! maybe if you re-write in perl the system will be able to
handle them.

Nope:

use strict;
use warnings;

my $file = "/proc/383/as";

open(FH, $file) or die $!;

my $buf = "";

# Dies here with: Value too large for defined data type
read(FH, $buf, 4, 0) or die $!;

close(FH);

Regards,

Dan
 
A

ara.t.howard

Nope:

use strict;
use warnings;

my $file = "/proc/383/as";

open(FH, $file) or die $!;

my $buf = "";

# Dies here with: Value too large for defined data type
read(FH, $buf, 4, 0) or die $!;

close(FH);

Regards,

Dan



/me kids

/dan needs more coffee ;-)


a @ http://codeforpeople.com/
 
D

Daniel Berger

/me kids

/dan needs more coffee ;-)

As far as I can gather it's a 32-bit largefile issue. The short
version is that a 32-bit Ruby (or Perl, or Python) will simply not be
able to read that file. The same code using a 64-bit Ruby works fine.

Well, except the part where my io-extra library segfaults on IO.pread
in 64-bit mode, but nevermind that.

Regards,

Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top