From: matz@... (Yukihiro Matsumoto) Date: 2002-06-03T06:26:50+09:00 Subject: [ruby-dev:17281] Re: IO#stat まつもと ゆきひろです In message "[ruby-dev:17278] Re: IO#stat" on 02/06/02, Wakou Aoyama 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なんて仮想ファイルがありましたよね)、 それほど特異なことではないと思います。 まつもと ゆきひろ /:|)