ファイルハンドルからファイルディスクリプタを返す
fileno
は、ファイルハンドルまたはディレクトリハンドルに割り当てられたファイルディスクリプタを返します。
ファイルディスクリプタとは、ファイルハンドルを通して実際のファイルにアクセスするためにシステムが用意するメモリ上のポインタのようなもので、
整数値として得られます。
fileno
は、指定のファイルハンドルまたはディレクトリハンドルにファイルディスクリプタが見つからないなら -1 を返します。
ファイルディスクリプタは実ファイルに 1 対 1 で割り当てられるものではなく、ファイルハンドルに割り当てられます。 そのため、2 つのファイルハンドルの参照先が同じファイルかどうかをチェックするために使うことはできませんので注意してください。 次のコードは、同じファイルに対して 2 つのファイルハンドルを作り、それぞれのファイルディスクリプタを表示しています。
open my $fh1, '<', './sample.txt';
open my $fh2, '<', './sample.txt';
print fileno($fh1), "\n"; # 3
print fileno($fh2), "\n"; # 4