作業ファイル装置(WORK DEVICE)を「TEMPORARY」にすると、ハードディスク上でどのように領域が取られるか?
下の画面は、作業ファイルをTEMPORARY、サイズを1000にして#TEDITを実行し、テキストを3700行まで読み込んで、ハードディスクの中身を一覧表示したものです。
TEMPORAYとしてとられた部分が、「***FREE SPACE*** TMP ***」のようにTMPと表示されています。
ハードディスクのどこに作業ファイルを取るのか内部的な仕組みはよくわかりませんが、どうもシステムが適当な空いている領域に指定サイズ分領域確保するようです。
画面にはTMP表示されているものが3つ見えます。
サイズを1000と指定すると、最初に一番下の1008セクタ分ある領域がTEMPORARYとして取られます。(1008-1000=8セクタ分はおそらくシステムがファイルを管理するための領域)
1セクタ当り2.5行のテキストを編集できるので、1000セクタだと約2500行が編集できます。
だいたい2500行まで読み込んだ時点で本来ファイルオーバーフローなのですが、緊急避難的に240セクタ分追加で確保されて約3100行までテキストが編集可能になります。さらにもう1回240セクタが追加されています(これが一番上のTMP)。ファイルサイズの拡張はあくまでも緊急避難的なものなので、2回までしか行われないようです。3719行を超えるとオーバーフローエラーとなります。
そもそも領域が空いていないと自動拡張は行われません。
だからと言って最初にサイズをやたらと巨大に確保しても無駄なだけなのでやめましょう。
例えば業務アプリで、実行中に一時的に作業用としてファイルを確保、使い終わったら作業ファイルを削除するような仕組みのものがあったとしましょう。#TEDITでやたらと巨大なTEMPORARYサイズを指定したとします。システムはハードディスクのテキトーな場所にTEMPORARYを確保します。業務アプリが動き出して、ハードディスク上に作業用ファイルを作ろうとすると、既にその場所を#TEDITがTEMPORARYとして使用中。作業用ファイルを作れない業務アプリは(作りによっては)エラー終了してしまうかもしれません。
一方#TEDIT使用者は一通り作業して何事も無くテキストの編集を終了、TEMPORARYは空き領域に戻ります。
後で業務アプリがエラーになった原因を調査しようとしても、ハードディスクに空き領域はいっぱいあるので、何でエラーになったのか原因がかわらない。こうして#TEDITを動かすたびに原因不明のエラーが発生するということにもなりかねません。
TEMPORARYを使うのは短時間の練習か業務が行われていない(確実にハードディスクに大量に空きがあることが分かっている)ときに使うぐらいにして、なるべくTEMPORARY以外にすることをお勧めします。