C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 40 を表示中)
■20042 / )  Re[8]: ディレクトリの排他アクセス
□投稿者/ れい (595回)-(2008/06/04(Wed) 15:50:04)
No20040 (とっちゃん さん) に返信
> 覚えてないや...orz

私もなかなか…思い出せない。
記録に残しておかないとだめですね。

と思って、
当時のFDDを探してきたのですが、
手元にドライブが無くて読めません…

> んと、Int21 で開くは、Win32でいえば、CreateFile に相当する仕組みです。
> FindFirst/Next は、エントリーリストを列挙するだけで
> 排他も共有もなく...今ある状態をあるがままに...
> で処理してたと記憶しておるのですが...もしかして勘違いしてる?

勘違いしてません。
FindFirstFileは、内部でディレクトリを開いて、列挙して、閉じます。
FindNextFileも同様です。

FindFirstFileとFindNextFileの間で、ディレクトリハンドルが閉じられるので
間でCreateFileとか入る余地があるので、
ファイルが列挙されなかったり、2重に取得できてしまったり、
変な結果が返ってくる可能性があります。

> その流れでいえば、現状のWin32(もちろんNT系)も同じと思うんですけど?

MS-DOSって、Int21hでディレクトリハンドルを開いて、
その後そのハンドルを指定して、別のコマンドでエントリを検索するのではありませんでしたっけ?

------

と思って、調べてみたら違いました…(記憶ってあてにならないなぁ
記憶を捏造していたようです。

DOS時代からディレクトリエントリの列挙はファイル名指定だったのですね。
で、列挙中はロックされない。

ということは、
Windows2.x辺りでファイルのロックは導入されたが、
ディレクトリエントリの列挙は用が足りていたのでそれっきりになったということですかね?

XPとかVistaとかのOS内部では使いまくってるので、
NTかOS/2で導入されたのでしょうか。
内部では使うけど、互換性を維持するためにAPIとして公開するのはFindXXXFileのみ。

FCBへのアクセスをやめ、ファイルハンドルを導入した辺りや、
階層的ディレクトリを導入した辺りに根源がありそうですね。

ファイルハンドルと同様にディレクトリハンドルも導入していれば、
ファイルもディレクトリも同等に扱うAPIになっていたかもしれない。

パス文字列を指定してエントリを取得する、というシステムコールではなく、
ハンドルを指定してエントリを取得する、というシステムコールになっていればロックがあったかもしれない。

ということでいいのかな?

#歴史的事情ならしょうがないですが。
#やっぱりディレクトリとファイルの扱いが違いすぎるのは私には残念です。
#デバイスドライバレベルでは十分に対応可能というのが悔しい。
#TxFを導入するなら、その辺綺麗にしてほしかったのですが。
#その点ではlinuxは綺麗ですね。シンプル且つ単純。

DOSやWin3.1以前は記憶があいまいなこともあり、あまり考慮してませんでした。
おかげでだいぶスッキリしました。

ありがとうございました。>all
解決済み
返信 編集キー/


管理者用

- Child Tree -