マジックナンバー
マジックナンバーというのはいろんなところでいろんな意味で使われている。最も一般に知られているのが、野球で使うマジックナンバーで、あと何勝ですれば、自力で優勝できる(他のチームが全勝したとしても)かという数字である。
プログラムの分野では、ネガティブな意味での「マジック」ナンバーという言い方もある。まあ、わけのわからない数字という意味だろう。プログラム中に数値として埋め込まれている数値で、何のためにその数値がそこに出てきたかがわからないというようなニュアンスである。望ましいプログラミングでは、定数式を使って書きなさいということである。
ここで、取り上げたいのはファイルフォーマットのマジックナンバーで、ファイルの先頭から順に読んでいったとき、特定のシークエンスの並びがあったら、そのファイルの中身はそのルールで書いてあるので、それを解釈するプログラムに渡しなさいという意味である。
たとえば、%! は PostScript だし、#! はUNIX ではシェルスクリプトで、それに続いてバージョン番号や、特定のプログラムを指示したりする。ファイル名の拡張子(extension) で区別するという方法もあるが、ファイル名は簡単に変わってしまうし、なにより、シリアルな通信路にデータを流したときに、先頭から少しだけ読めばわかるということは非常に意味が大きい。
UNIXでは、扱われるすべてのファイルフォーマットにマジックナンバーが決まっている(マジックナンバーの入っていないファイルは、ただのテキストかバイナリデータである)。file コマンドを使うと、ファイルの種別がわかるようになっているし、システムによって違うが、マジックナンバーのリストがどこかに格納されている(FreeBSD7では、/usr/share/misc/magic) 。
ところが、MS-DOS、Windows 型システムでは、ファイルの識別子によって、ファイルフォーマットを区別するのが一般的だ。
この違いが、ネットワーク型のシステムなのか、そうでないのかを決定づけていると思う。回線上を順にやってくるデータを処理しているような概念と、デスクトップに書類を積み上げたのとの違いのようなものかもしれない。
ただ、おそらく一般的な感覚としては、このデスクトップ型のほうが馴染みやすく、ネットワーク型の考え方は馴染みにくいようだ。その割には、日本人は行列にならぶのが好きなような気がするのだが、これはまた別の感覚なのだろう。
最終更新日: $Date: 2008-11-02 16:34:22+09 $






