まつもと ゆきひろです

In message "[ruby-dev:17278] Re: IO#stat"
    on 02/06/02, Wakou Aoyama <wakou / ruby-lang.org> writes:

|UNIX がそれを許している、という言葉を理解するのにだいぶ悩んでしまいま
|したが、ようやくわかりました。なるほど。(また勘違いしているかもしれま
|せんが)
|
|file, socket, pipe 等の判定は stat で行う、つまり、file, socket, pipe
|などどれかわからない状態で利用するのが stat であり、すなわち IO に対す
|る確認用のシステムコールが stat であるわけだから、IO にあってしかるべ
|き、という事かと勘違いしていました。

いや、勘違いではなくそんな感じです。で、そのやり方はRubyが踏
襲しているUNIXというモデルではstatであるので、それをわざわざ
変える必要はないということです。

たとえばmodeというメソッドを用意すると、modeという名前を思い
つくためには struct stat に関する知識が必要なわけです。そこ
まで要求しておきながら stat を避ける必然性はないだろうと。

|Windows や Mac では、ファイルはディスクなどに記録されたデータであり、
|socket などはディスクなどには存在しないものであり、ファイルとは無関係
|なものです。
|
|ところが、UNIX では、socket も pipe もファイルであり、単にシステムコー
|ルがそれに属するとかではなく、実際にディスク上でも、特殊ファイルとなっ
|ているわけですよね。

CではFILE*が実際にはファイルではないことはよくあるので(stdio
とか、DOSだとPRNとかCONなんて仮想ファイルがありましたよね)、
それほど特異なことではないと思います。

                                まつもと ゆきひろ /:|)