アプリケーションのほとんどはファイルを読んだり、書いたりします。MS-DOSでは、
Ver.2.0までFCB(File Control Block)というものを利用してファイル操作を行っていました。
しかし、それ以降のMS-DOSではファイルハンドルというものを利用しています。FCBを
利用したファイル操作は、それ以降のMS-DOSでも使用することはできますが、使い方が
面倒なことや機能的な面で、互換性を保つ必要がある場合にのみ使用するように推奨されています。
ファイルを読んだり、書いたりするためには、ファイルをオープンしなくてはなりません。
そして使い終わったファイルはクローズしなくてはなりません。
ファイルのオープンするためには、ファイル名(パス名)とそのファイルをどのように
扱うかを指定します。そしてファイルをオープンした後は、ファイルハンドルという
番号で管理します。
余談になりますが、MS-DOSのメモリー管理はセグメントで行っていましたが、MS-Windowsでは
メモリー管理も、ウインドウ管理も、当然ファイルも、ほとんどの資源がハンドルという番号で
管理されています。その原点が、このファイルハンドルというわけです。
ファイルオープン
AH = 3Dh
AL = ファイルアクセスモード
DS:DX = ファイル名(パス名)の格納アドレス
INT 21h
戻り値:CF = 0 のとき
AX = ファイルハンドル
CF = 1 のとき
AX = 0001 : シェアリングモードが無効
AX = 0002 : ファイル名が無効またはファイルが存在しない
AX = 0003 : パス名が無効または存在しない
AX = 0004 : オープンしているファイル数が多すぎる
AX = 0005 : ディレクトリやボリュームをオープンしようとした。または
リードオンリーファイルをライトモードでオープンしようとした
AX = 000C : アクセスモードが無効
|
ALの上位1ビットは「インヘリッドビット」と呼ばれるもので、次の3ビットは
「シェアリングモード」を表します。これらについての説明は省略しますが、
普通はすべてのビットを「0」にすると覚えておいてください。
そして、下位4ビットは「アクセスモード」で、ファイルを読むだけで書き込みはしない場合は
「0」、ファイルを書くだけで読まない場合は「1」、読み込みも書き込みも行う場合は「2」を
設定します。
DS:DXにはファイル名もしくはパス名が格納されているアドレスを指定しますが、ファイル名、
パス名の最後には「00h」を格納し、ASCIIZ文字列として格納していなければなりません。
以上を設定し、「INT 21h」を呼び出し、CF=0で帰ってくれば、正常にファイルをオープン
できたことになり、AXにファイルハンドルが返ってきます。もしCF=1ならば、エラーがあった
ことを示します。
エラーコード「4」では、CONFIG.SYSに記入されている「FILES = ??」の値が小さく、
ファイルハンドルの数が足りなくなってしまい、ファイルをオープンできなかったことを
示します。