第36回
ファイルの扱い(1)~オープン/クローズと読み書き

磁気テープから磁気ディスクへ

初期のコンピュータでは、リールに巻かれた磁気テープに情報を記録していました。汎用機には、その時代のファイル管理手法が受け継がれています。一方UNIXは磁気ディスクの特長を活かしたファイルシステムを採用しました。

基本は磁気テープ

磁気ディスクが登場する以前、外部記憶装置の主流は磁気テープでした。磁気テープはディスクとは違って一方向にしか進めることができません。いわゆるシーケンシャル・アクセスです。

ディスクのように飛び飛びにデータを書き込むことができないため、ファイルを生成する場合には使用する領域をあらかじめ確保(アロケート)し、アクセス手段(メソッド)も決めておく必要がありました。

磁気ディスクが登場してからも、汎用機ではファイルの扱いに磁気テープとの整合性を保つ必要があったため、ディスクに対しても領域の確保とアクセス手段の確定を必要とする仕様になっています。


領域の確保とアクセス手段

磁気テープでのファイルの作成手順は、たとえば以下のような感じです。
1件分のデータが
「番号(6桁)、品名(20桁)、単価(6桁)、数量(4桁)」で構成されており
「番号」を索引(インデックス)として検索できる形として
全体で1000件分の領域を確保
……といった感じで“SHOHINDAT”という名前のファイルを作成し、その後プログラムがそのファイルに対して読み書きを行う――というようなスタイルです。

ファイルへのアクセス手段には、索引を基準にして1件のデータを検索できる索引順編成(ISAM)ファイルや、先頭から順に1件ずつ読み取っていくシーケンシャルファイルなどがあります。

どのようなアクセス手段を採用した場合でも「1件が何バイト×全体で何件」という形で領域を確保しなければなりません。

この形式は、データベースで表(テーブル)を作成する手順と似ています ※3

「似ている」というより、こうした汎用機でのファイル管理の手法がCOBOLによるプログラミング手法に受け継がれ、さらにそこからデータベース操作言語SQLが派生しました。汎用機のファイル管理手法は、データベース・システムの祖先です

UNIXのフリーフォーマット

一方UNIX系のOSでは、磁気ディスクの「読み書きの位置を自在に移動できる」というメリットを活かして、
ディスクに記録する情報の1件の長さは改行まで
自在にデータの追記や削除が可能
シーケンシャルにもランダム(無作為)にもアクセス可能
という形のファイルシステムが採用されました。「フリーフォーマット」と呼ばれる形式です。

これによって、プログラムがファイルの領域をあらかじめ確保しておく必要がなくなり、必要なときに必要な情報を自由に読み書きできるようになって、プログラムのファイルアクセスが合理的かつ効率的になりました。

フリーフォーマット形式のファイルでは、1件のデータの長さを気にすることなく書き込んだり削除したりできます。また、データベースのような厳密に書式化されたファイルを作って操作することも可能です。