MSX-DOS2PIS 03 03

From Z80 Machines Wiki
Jump to: navigation, search

3.3.ファイルハンドル

ファイルハンドルは、新しいMSX-DOS関数を使用してファイルを読み書きする方法です。ファイルハンドルはまた、他の方法でファイルを操作するためにも使用され得る(例えば、ファイル属性の操作)。

ファイルハンドルは、特定の開いているファイルまたはデバイスを参照する8ビット数です。 「ファイルハンドルを開く」(機能43H)または「ファイルハンドルを作成する」(機能44H)機能が使用されると、新しいファイルハンドルが割り当てられる。ファイルハンドルは、ファイルへのデータの読み書きに使用でき、 "ファイルハンドルを閉じる"(機能45H)または "ファイルハンドルを削除する"(機能52H)機能が呼び出されるまで存在し続けます。属性の変更やそれらが参照するファイルの名前変更など、ファイルハンドルを使用してファイルに対して他の操作を実行できます。

verは127より大きくなるため、ファイルハンドルがマイナスになることはありません。

ファイルハンドルに使用される内部データ構造のためのスペースは、16K RAMセグメント(「データセグメント」)内に動的に割り当てられるので、一度に開くことができるファイルハンドルの数に固定的な制限はありません。このセグメントはTPAの外部に保持されるため、そこに格納されているものがTPAのサイズを縮小することはありません。内部ファイルハンドル情報を保持するだけでなく、システムはデータセグメント内にディスクバッファと環境文字列も保持します。

さまざまなファイルハンドルが事前に定義されており、一時プログラムの実行時にすでに開かれています。これらのファイルハンドルは標準の入出力装置を参照します(セクション3.2を参照)。 「伝統的な」CP / MスタイルのMSX-DOS文字入出力機能は、実際にはこれらのファイルハンドルを参照します。

一時プログラムは、実際には、オリジナルではなく、コマンドインタプリタが使用していた標準入出力ファイルハンドルのコピーを取得します。つまり、プログラムはこれらのファイルハンドルを自由に閉じて別の場所に再度開くことができるため、以前にリセットする必要はありません。 終了しています。

デフォルトのファイルハンドルとその保存先は次のとおりです。

 0 - Standard input (CON)
  1 - Standard output (CON)
  2 - Standard error input/output (CON)
  3 - Standard auxiliary input/output (AUX)
  4 - Standard printer output (PRN)

コマンドインタプリタがコマンド(たとえば一時プログラム)を実行しようとしているとき、それは「フォーク」ファンクションコールを実行する(ファンクション60H)。これは、新しいプログラムが "サブルーチン"として実行されていることをシステムに通知します。とりわけ、現在開いているファイルハンドルはすべて複製されます。 。

一時プログラムが既存のハンドルを閉じたり新しいハンドルを開いたりしてファイルハンドルのいずれかを変更した場合、変更されるのはプログラム自体のファイルハンドルのセットになり、元のセットは変更されません。プログラムが終了した後、コマンドインタプリタは "join"ファンクションコールを実行し(ファンクション61H)、元の "fork"から返されたプロセスIDを渡します。これはシステムに新しいプログラムが終了したことを伝えます、そしてそのすべてのファイルハンドルは捨てられます。

参照カウントは、各ハンドルのコピー数が保持されているため、プログラムの終了時に不要になったファイルハンドルを整理することができます。これは、不正に振舞われたプログラムがそれらを閉じないためにシステムがファイルハンドルを使い果たすことがないことを保証します。

これらの "fork"および "join"機能は、それらが有用であると考えるならば、ユーザープログラムに利用可能です。ファイルハンドルを整理することに加えて、 "join"はプログラムが解放していないユーザー割り当てのRAMセグメントも解放します。