^Z の意味

マイクロソフトの「Cランタイム・ライブラリ」に \x1D を読み込ませると、そこで入力が止まってしまうという話を少し前にした。

古い本「C言語を256倍使うための本」を読んでいたらその理由が書いてあった。

だが^Zは, ファイルサイズをクラスタ単位でしか管理していなかったCP/M時代の遺物で、ファイルサイズがバイト単位で管理されているDOSでは不要なもののはずだ. リダイレクト“>>”を使う場合にも, ^Zの存在は邪魔であり, 現時点では^Zはなくした方がよいと考えられる.

これがヒントになり色々調べてみると、WikipediaCP/Mに詳細が書いてあった。

File size was specified as the number of 128-byte records (directly corresponding to disk sectors on 8-inch drives) occupied by a file on the disk. There was no generally supported way of specifying byte-exact file sizes. The current size of a file was maintained in the file's file control block (FCB) by the operating system. Since many application programs (such as text editors) prefer to deal with files as sequences of characters rather than as sequences of records, by convention text files were terminated with a control-Z character (ASCII SUB, hexadecimal 1A). Determining the end of a text file therefore involved examining the last record of the file to locate the terminating control-Z. This also meant that inserting a control-Z character into the middle of a file usually had the effect of truncating the text contents of the file.
ファイルのサイズは、ディスク上で128バイト(8インチ・ドライブのディスク・セクターに相当)のレコードがいくつ占有するかという数字で指定される。正確なファイルサイズを指定する方法はない。ファイルサイズはOSが管理するファイル中のFSB(ファイル・コントロール・ブロック)で管理される。テキスト・エディタのようなアプリケーションはファイルをレコード単位ではなく文字単位で扱う傾向にあるので、習慣としてテキストファイルは contrl-z 文字(ASCIIのSUB, 16進数で1a)で終端されることとなった。というわけで、テキストファイルの終わりは最終レコードの control-z で判断されるうることなった。またファイル中に control-z を挿入することは、ファイルの中身を切り詰めることを意味した。

http://en.wikipedia.org/wiki/CP/M#File_system

へぇ〜。人体に尻尾の痕跡が残ってるみたいな話だな。

そういえば似たような話で、ExcelLotus 1-2-3閏年バグが再現されているとかいう話もあったっけ。