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: $!";