sysseek FILEHANDLE
sysseek
は、seek
の変種で、引数FILEHANDLE
のファイルシステムのread
/wirte
位置をlseek(2)
システムコールを使って設定・取得します。FILEHANDLE
は式でも構いません。その場合はその値がファイルハンドルの名前となります。WHENCE
の値が、0ならば、新しい位置をPOSITION
の位置へ、1 ならば、現在位置からPOSITION
加えた位置へ、2 ならば、EOF
からPOSITION
だけ加えた位置へ、新しい位置を設定します。この値には、Fcntl
モジュールで使われているSEEK_SET
、SEEK_CUR
、SEEK_END
(0=ファイルの先頭、1=現在位置、2=ファイルの最後)という定数を使うこともできます。
sysseek
はstdio
をバイパスしますので、 (sysread
以外の)読み込み、 print
、write
、seek
、tell
、eof
と混ぜて使うと混乱を引き起こします。
sysseek
の返却値は、成功時に新しい位置を返します。失敗したときは未定義値を返します。位置がゼロの場合は、0 but true
の文字列として返されます。
sysseekの使い方
use Fcntl qw(:DEFAULT :flock); use IO::Seekable; ・・・ sysopen(FH, $file, O_WRONLY|O_APPEND|O_CREAT); flock(FH, LOCK_EX); # ファイルの末尾に位置を設定 sysseek(FH, 0, SEEK_END) or die "sysseek error: $!";