5部 関数リファレンス

sysseek

sysseek FILEHANDLE



sysseekは、seekの変種で、引数FILEHANDLEのファイルシステムのread/wirte位置をlseek(2)システムコールを使って設定・取得します。FILEHANDLEは式でも構いません。その場合はその値がファイルハンドルの名前となります。WHENCEの値が、0ならば、新しい位置をPOSITIONの位置へ、1 ならば、現在位置からPOSITION加えた位置へ、2 ならば、EOFからPOSITIONだけ加えた位置へ、新しい位置を設定します。この値には、Fcntlモジュールで使われているSEEK_SETSEEK_CURSEEK_END(0=ファイルの先頭、1=現在位置、2=ファイルの最後)という定数を使うこともできます。

sysseekstdioをバイパスしますので、 (sysread以外の)読み込み、 printwriteseektelleofと混ぜて使うと混乱を引き起こします。

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

関連記事