パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

「nul」という名称のRustパッケージ、Windowsユーザーに不具合を起こす」記事へのコメント

  • by Anonymous Coward

    10年以上windows使ってるけど初めて知ったわ
    拡張子ついててもダメなんだな

    • by Anonymous Coward
      ディレクトリがサポートされていな MS-DOS 1.0 での仕様なのだよな。
      MS-DOS 2.0 で階層ディレクトリがサポートされたが、デバイスファイルは、互換性として階層なしのファイル名だけで操作できるままになった。

      現代まで、その部分の互換を引き続いてる。
      機能は追加されたが削除されてないので、当時のバッチファイルが今でも動くのは、すごいことだけど、本当に必要なのかは疑問もあるな。
      • by Anonymous Coward

        古いWindowsのソフトは動かなかったりするのに
        そんな盲腸みたいな部分の互換性は残ってるという……

        • by Anonymous Coward

          例えばシリアル ポートを列挙するアプリがx86とx64の両方をサポートしていて、COMおよびCOM0からCOM9までをCreateFile APIで開いて存在を確認するなんていうコードが残っていたりするのです。そうすると、後方互換性を維持するためにMS-DOS互換の挙動を残さざるを得ないといったようなことが起こるのです。

          Rustの今回の修正ではnul以外も対応されているので見てみると参考になると思いますよ。

          • by Anonymous Coward
            COM1から始まるのでCOM0はシリアルポートの名前としては正しくない
            • by Anonymous Coward

              そうですねね。
              というわけで、Microsoftが示している現行Windowsの予約済みのファイル名が載っているページを示しますね:

              Naming Files, Paths, and Namespaces (Windows) [microsoft.com]

              これによれば、

              CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9

              とのこと。

              Windowsをサポートしているということであれば、これをNGとす

              • by Egtra (38265) on 2017年05月13日 5時35分 (#3210011)

                ほかにも、コンソール入力・出力のCONIN$とCONOUT$なんかもあります: CreateFile function (Windows) [microsoft.com]。厳密には、予約済みファイル名とは異なる扱いなのかもしれませんが、実用上はCON~LPT9と同じ予約済みファイル名として扱うのが良いと思います。

                親コメント

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

処理中...