rename, unlink されたファイルを読み続ける

前にも言及した tail のネタなんだけど、冷静に考えると inode まで見てるんじゃなくて、単に open して file descriptor を取得してしまえば rename しようが、unlink しようが読み続けられるってだけの話では。
たとえば、こんなスクリプト slowcat.pl を用意すると確認できる。

#!/usr/bin/env perl

use strict;
use warnings;

while (<>) {
    sleep 1;
    print;
}

で、

% seq 1000 > /tmp/seq
% perl slowcat.pl /tmp/seq
1
2

とでもしておいて、別の端末から

% mv /tmp/seq /tmp/sep

もしくは

% rm /tmp/seq

を実行する。slowcat.pl が何事もなかったかのように出力を続けるのが確認できるはず。ついでに

% ls -l /proc/`pgrep -f slowcat.pl`/fd

とかしてみても面白いかも。
あ、Linux + ext3 の話で POSIX 的にどうなのかは知らないので。
関係ないけど、id:lurker さんに Trackback しすぎだな。