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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.20042 の関連記事表示

<< 0 >>
■20042  Re[8]: ディレクトリの排他アクセス
□投稿者/ れい -(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
記事No.19998 のレス / END /過去ログ40より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -