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 しすぎだな。