ディレクトリポインタの位置を再設定する
seekdir
は、DIRHANDLE 上での readdir
ルーチンの現在位置を POS にセットします。
POS の値は、必ず telldir
から得られた値を使ってください。
なぜなら、現在位置を表す値は OS 環境によって異なるためです。そのあたりの詳細は telldir
の解説をご覧ください。
次のコードは、事前にディレクトリ内のエントリをすべて読み取って test2.txt
の位置を取得しておきます。
その後、test2.txt
の位置に現在位置を変更し、再度、test2.txt
を読み取ってみます。
# ディレクトリを開く
opendir my $dh, './sample';
# ディレクトリを読み取って test2.txt の位置を特定
my $target_pos = 0;
my $current_pos = 0;
while ( my $file = readdir $dh ) {
if ( $file eq 'test2.txt' ) {
$target_pos = $current_pos;
}
$current_pos = telldir $dh;
}
# test2.txt の位置にディレクトリポインタを移動
seekdir $dh, $target_pos;
# 現在のディレクトリポインタが指しているエントリを読み取る
print readdir $dh, "\n"; # test2.txt