conってなに?
はてなのカテゴリーはなんでソートして表示してくれないのか?で秀丸から以下のプログラムの実行をした
sort <con >con
「con」ってなにかというと、Windows(MS-DOS時代)からの予約デバイスで
コンソール、すなわち現在入出力を行っている画面・キーボードを表す。
標準出力、標準エラー出力を捨てるための 「nul」と同類。
wikipedia 予約デバイス con
CONCON問題かぁー。懐かしいな。
そんな20世紀の遺物の話なんてどうでもいいよと思うかもしれないが、未だにWindowsは引きずっている。
今のWindowsでも、「con」というフォルダは作成できない。
Windows XPの場合
エクスプローラーから作成しようとするとconという名前を付けても「新しいフォルダ」のまま変わらない。
コマンドプロンプトだと、以下のエラーになる。
D:\temp>mkdir con
ディレクトリ名が無効です。
Windows 7の場合
エクスプローラーから作成しようとすると以下のエラーになり、原因が分かるようになった。
指定されたデバイス名は無効です。
コマンドプロンプトの結果はWindows XPと同じ。
例えば、ユーザーがフォルダのパスを指定して、そのフォルダがなかったら作成するプログラムが
あったとする。
ユーザーが、「com」と間違えて「con」と入力してしまった場合に、エラー判定が抜けていると
予期せぬエラー、システムエラーになったりしてしまう。
#include "stdlib.h" #include "stdio.h" #include "windows.h" int main(int argc, char* argv[]){ if(CreateDirectory("C:\\con_",NULL)){ printf("ディレクトリ作成成功\n"); }else{ printf("ディレクトリ作成失敗(errno=%d)\n",GetLastError()); return 1; } if(CreateDirectory("C:\\con",NULL)){ printf("ディレクトリ作成成功\n"); }else{ printf("ディレクトリ作成失敗(errno=%d)\n",GetLastError()); return 1; } return 0; }
結果は以下で、エラーとなる。
D:\workspace\C_SandBox\02Windows\mkdir_con\Debug>mkdir_con.exe ディレクトリ作成成功 ディレクトリ作成失敗(errno=267)
case文でエラー値で267を判定していないと、
defaultルートに倒れて、システムエラーとなってしまうパターンだ。
ちなみに、エラー値267は「ディレクトリ名が無効です。」である。