7 local $SIG{'__WARN__'} = \&Carp::cluck;
13 require 'asm/ioctl.ph';
15 our %sizeof = ('int' => 4);
16 sub FIOC_GET_SIZE { _IOR(ord 'E', 0, 'int'); }
17 sub FIOC_SET_SIZE { _IOW(ord 'E', 1, 'int'); }
21 Usage: fioclient.pl FIOC_FILE COMMAND
24 s [SIZE] : get size if SIZE is omitted, set size otherwise
25 r SIZE [OFF] : read SIZE bytes @ OFF (default 0) and output to stdout
26 w SIZE [OFF] : write SIZE bytes @ OFF (default 0) from stdin
33 usage() if scalar(@ARGV) < 2;
35 open(my $file, '+<', $ARGV[0]) or usage();
37 if ($ARGV[1] eq 's') {
38 if (!defined $ARGV[2]) {
40 my $rv = ioctl($file, FIOC_GET_SIZE, $size);
41 if (!defined($rv) || $rv != 0) {
44 printf("\%u\n", unpack('L', $size));
47 my $rv = ioctl($file, FIOC_SET_SIZE, pack('L', $ARGV[2]));
48 if (!defined($rv) || $rv != 0) {
53 elsif ($ARGV[1] eq 'r' || $ARGV[1] eq 'w') {
54 usage() unless defined $ARGV[2];
57 if (defined $ARGV[3]) {
60 seek($file, SEEK_SET, $off);
61 if ($ARGV[1] eq 'r') {
62 read($file, my $data, $size);
66 read(STDIN, my $data, $size);