syswrite
FILEHANDLE
,
SCALAR
,
LENGTH
,
OFFSET
syswrite
FILEHANDLE
,
SCALAR
,
LENGTH
This function attempts to write
LENGTH
bytes of data from
variable
SCALAR
to the specified
FILEHANDLE
using
write
(2). The function returns the number of bytes actually
written, or the undefined value on error. You should be prepared to
handle the problems that standard I/O normally handles for you, such as
partial writes. The
OFFSET
, if specified, says where in the
string to start writing from, in case you're using the string as a
buffer, for instance, or you need to recover from a partial write. To
copy data from filehandle
FROM
into filehandle
TO
, use
something like:
$blksize = (stat FROM)[11] || 16384; # preferred block size?
while ($len = sysread FROM, $buf, $blksize) {
if (!defined $len) {
next if $! =~ /^Interrupted/;
die "System read error: $!\n";
}
$offset = 0;
while ($len) { # Handle partial writes.
$written = syswrite TO, $buf, $len, $offset;
die "System write error: $!\n"
unless defined $written;
$len -= $written;
$offset += $written;
}
}
Do not mix calls to (
print
or
write
) and
syswrite
on
the same filehandle unless you are into heavy wizardry.