in reply to Re^2: explanation for sysread and syswrite
in thread explanation for sysread and syswrite
That's better.
A few comments:
- Always check the result of a file open or I/O operation.
- You don't need to know the size of your file to use sysread. You can say how much sysread should read, and that function will return the number of bytes read, or 0 when it's finished.
- If you really need to know the file size, use a -s check.
Here is an example.
#!/usr/bin/perl use warnings; use strict; my $filename = "stable.tar.gz"; # it's the latest Perl source code die "filename not found\n" unless -f $filename; my $size = -s $filename; my $total_read = 0; open F, "< $filename" or die "can't open $filename\n"; my $bufsize = 2_000_000; my $buffer; while ( my $read = sysread(F , $buffer , $bufsize, ) ) { printf "Read %8u bytes\n", $read; # do something with $buffer $total_read += $read; } print "initial size: $size\n"; print "total read: $total_read\n"; __END__ output: Read 2000000 bytes Read 2000000 bytes Read 2000000 bytes Read 2000000 bytes Read 2000000 bytes Read 2000000 bytes Read 254916 bytes initial size: 12254916 total read: 12254916
HTH
In Section
Seekers of Perl Wisdom