|
■No20433 (す さん) に返信 >>ディレクトリとファイルを同等に扱えてもいいじゃないかと、ずっと言っています。 > > これが不思議なのです。 > データベースとファイルを同等に扱えてもいいじゃないかと、 > というように聞こえるのです。
なるほど。 そこが疑問ですか。 それも何回も言ってるつもりですが。
> ■No20429 (れい さん) に返信 > >>広義のデータベースの話ですか。 >> >>それなら当然ファイルシステムはデータベースです。 > > また極端な。ディレクトリがキー付きレコードの集合体であることを指してます。
ディレクトリはたしかにエントリを保持しますが、 それはテーブルというアナロジーとは完全には一致しません。 ディレクトリはそれ自身も属性と名称、親ディレクトリをもつわけで、 ディレクトリもファイルと同じディレクトリのエントリです。
操作をハンドルやファイルオブジェクトとして抽象化するなら、 ファイルシステム内のオブジェクトも
class FileSystemEntry { public DateTime CreationDate; ... } class File : FileSystemEntry { public Stream MainStream; ... } class Directory : FileSystemEntry { public List<FileSystemEntry> Entries; }
という感じで抽象化されてもよいのではないですか? むしろ、そのほうが綺麗ではないですか?
例えば。 「c:\aaa\tmp」という「ファイル」がある場合、 「c:\aaa\tmp」という「ディレクトリ」を作ることはできませんよね? パス名はファイルとディレクトリ共通で、重複する名前は作れません。
それを表現する際に「他のエントリと同名のエントリは作れません」と表現できるべきではないですか? 「他のファイルもしくは他のディレクトリと同名のファイルもしくは同名のディレクトリはつくれません」 というのは大変です。
後者の様な、めんどくさい実装になってると思いますか?
最初から作り直されたであろう.Netでも、 FileSystemInfo -> FileInfo, DirectoryInfo という順に継承されていますよね。
> >NTKernel層ではディレクトリはハンドルで開き、その際共用アクセス制御はあります。 > >Win32 SubSystem層になる際にそれは隠蔽され、FindXXXFileになってしまいます。 > > は、なにか悪いことのような書き方ですが、 > > >それは > >> その「第一の理由」の教科書的答えはNTがMicroKernel戦略だからということになりますが、 > >ここに集約されてますが。 > > なら、悪くないのでは?
まず、さして重要でない齟齬を言うと。 ディレクトリハンドルを隠蔽しているのはWin32層です。NTカーネル内ではありません。 なので、隠蔽してもしなくても「カーネルの安定」とはほとんど関係ありません。
それと、本質が一つ。
よりシンプルで高機能な実装があるのにそれを隠蔽し、醜い実装になってるのは 歴史的にしょうがなかったとしても、それ自体は「ダメ」です。負の遺産です。
「普通に考えて」ファイルシステムエントリという概念を導入し、 ディレクトリはそのリストを保持すると考えたほうが合理的だと。
データベースのアナロジーで言うなら。
す さんは 「ファイル名,更新日時,アクセス日時,…」 というテーブルが、ディレクトリ毎に存在するだけのデータベースを考えてるようですが、 これではファイルシステムとしてうまく機能しません。
ファイル名と同じディレクトリが作れないことはどうやって確認しますか? ディレクトリの属性や、細かい情報はどこに保存しますか?
少なくとも、 「エントリ名,エントリ種別(ファイル/ディレクトリ),更新日時,アクセス日時,…」 というように、エントリ毎のレコードにする必要があります。 エントリのテーブルをディレクトリ毎に作るべきです。
#FATはこうなってます。一方NTFSは全エントリが1テーブルです。
ディレクトリは属性をもっているのか、とか、 ファイル名と同じ名前のディレクトリが作れるかどうか、とか、 ディレクトリ自身がストリームを持ってもいいのか、とか、 そういったことはOSやファイルシステムによって違う場合もあるでしょうが。
少なくともWindowsのファイルシステムでは、ディレクトリとファイルはカーネルでほぼ同等に扱われています。
で、ディレクトリハンドルをAPIで使用可能にした場合、 どのくらいパフォーマンスが落ちる可能性があるのかは、不明です。
私の価値観では、 エントリのハンドルを開けるようにして得られる「綺麗さ」は、 ロックによりパフォーマンスが落ちるであろう「懸念」を、 圧倒的に上回ります。
しかし、DOSとの互換性と言われると…。諦めざるを得ません。 盲腸も盲点も口蓋垂も私は要りませんが、 イカやミミズから生まれなおすわけにいかないので。
|