file descriptorからファイル名を調べる(Linux編)

file descriptorからファイル名って引けるのだろうかと
思って調べみたところ、procfsで簡単にファイル名を得ることが
できたのでそのメモ

方法

以下のコマンドでファイル名が取得できます

% sudo readlink /proc/(プロセスID)/fd/(ファイルディスクリプタ)

サンプル

以下のようなプログラムを走らせて, PIDとファイルディスクリプタを得ます

#!perl
use strict;
use warnings;

open my $fh, '<', 'test.pl' or die "Can't open file: $!";
printf "pid=%d, fd=%d\n", $$, fileno $fh;

sleep 100;


該当のエントリに対して readlinkを実行すると以下のようになります。

おわりに

Linuxでファイルディスクリプタからファイル名を調べる方法を
示しました。Linuxはこのあたりよくできていていいですね。