ファイル名に使える文字を調べようと思い WinMe で次のプログラムを実行したところ、 "_" という名前のファイルが複数できて、どうやっても削除できなくなった。
(0..255).each do |i| begin File.open(i.chr, 'w').close rescue => err puts "#{i.chr.inspect}: #{err.class}; #{err.message}" end end
どうしろと……。
ちなみに各種システムでの実行結果は次のようになった。
### Linux 2.4.20 (ext2) "\000": Errno::ENOENT; No such file or directory - "" ".": Errno::EISDIR; Is a directory - "." "/": Errno::EISDIR; Is a directory - "/" ### Solaris 9 (ufs) "\000": Errno::ENOENT; No such file or directory - "" ".": Errno::EINVAL; Invalid argument - "." "/": Errno::EINVAL; Invalid argument - "/" ### Cygwin / Windows Me (FAT32) "\000": Errno::ENOENT; No such file or directory - "" 中略 "\037": Errno::ENOENT; No such file or directory - "\037" "\"": Errno::ENOENT; No such file or directory - "\"" "*": Errno::ENOENT; No such file or directory - "*" ":": Errno::ENOENT; No such file or directory - ":" "<": Errno::ENOENT; No such file or directory - "<" ">": Errno::ENOENT; No such file or directory - ">" "?": Errno::ENOENT; No such file or directory - "?" "|": Errno::ENOENT; No such file or directory - "|" "\200": Errno::ENOENT; No such file or directory - "\200" 中略 "\210": Errno::ENOENT; No such file or directory - "\210" "\340": Errno::ENOENT; No such file or directory - "\340" "\353": Errno::ENOENT; No such file or directory - "\353" "\354": Errno::ENOENT; No such file or directory - "\354" "\355": Errno::ENOENT; No such file or directory - "\355" "\357": Errno::ENOENT; No such file or directory - "\357" "\360": Errno::ENOENT; No such file or directory - "\360" 中略 "\372": Errno::ENOENT; No such file or directory - "\372" ### Windows Me native (FAT32) "\000": Errno::ENOENT; No such file or directory - "" 中略 "\037": Errno::ENOENT; No such file or directory - "\037" "\"": Errno::ENOENT; No such file or directory - "\"" "*": Errno::ENOENT; No such file or directory - "*" ":": Errno::ENOENT; No such file or directory - ":" "<": Errno::ENOENT; No such file or directory - "<" ">": Errno::ENOENT; No such file or directory - ">" "?": Errno::ENOENT; No such file or directory - "?" "|": Errno::ENOENT; No such file or directory - "|" "\200": Errno::ENOENT; No such file or directory - "\200" 中略 "\210": Errno::ENOENT; No such file or directory - "\210" "\340": Errno::ENOENT; No such file or directory - "\340" "\353": Errno::ENOENT; No such file or directory - "\353" "\354": Errno::ENOENT; No such file or directory - "\354" "\355": Errno::ENOENT; No such file or directory - "\355" "\357": Errno::ENOENT; No such file or directory - "\357" "\360": Errno::ENOENT; No such file or directory - "\360" 中略 "\372": Errno::ENOENT; No such file or directory - "\372"
Linux と Solaris で微妙に errno が違うのがちょっとイイ感じである。
Cygwin/WinMe と WinMe の結果は全く同じだった。 ということはあの変なエントリは WinMe ネイティブの仕様なのか。
あとは Windows 2000 (NTFS) を試したいところだけども、 リブートしないといけないのが面倒だなあ。 やっぱり専用マシンが欲しい。
あ、消えた。さっきの逆に 0..255 を全部 unlink したらオケー。 あれは何だったんだろう? もう一回やってみよっと。
だいたいこういうときって墓穴掘るんだよな〜。 本当に消えなくなったりしてさ。
でもって FreeBSD4.7/Alpha。 こないだ HDD を交換したあと ruby を入れ忘れてて今コンパイルしたことは秘密だ。
### FreeBSD 4.7 (ufs) "\000": Errno::ENOENT; No such file or directory - "" ".": Errno::EISDIR; Is a directory - "." "/": Errno::EISDIR; Is a directory - "/"
あ、EISDIR なんだ。ちょっと意外かも。
Solaris と FreeBSD には clri (clear inode) がある。Linux にはない。
Solaris には crle (config runtime linking environment) がある。
ややこしい名前を付けるな。
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.