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

ファイルとは何か?

「ファイル」というと、我々人間は同じサイズの紙を綴じた冊子のようなものをイメージします。コンピュータで扱うファイルもこれと似たイメージで『一定の意味を成す情報群に名前を付けてまとめたもの』を指します。

ファイルを扱うメリット

ここまで、プログラムがデータを受け取る仕組みにはscanf関数などによるキーボード入力またはリダイレクトを、処理結果の出力にはprintf関数による標準出力への出力(基本はディスプレイへの表示)を用いてきました。

単純なプログラムならこのような仕様でも十分です。よけいな仕組みを抱え込んでプログラムが大きく重くなるより、小さく軽い方が手軽に実行できます。

しかし、処理が複雑になり、さらにユーザーの利便性などを考慮すれば、ディスク上のファイルからデータを入力し、処理結果もファイルに記録する――という仕様の方が有利です。

主記憶と外部記憶

コンピュータで扱うファイルは、ディスクなどの記録装置に磁気的・電子的な形で記録されます。要するに、ファイルはコンピュータが扱うための情報を人間に理解しやすくしたもので、いわゆるメタファ ※1 の一種です。

CPUは0と1の2進数で表されたメモリ上のデータを先頭から順に――シーケンシャルに読み書きしていくことが基本です(ただ、読み書きの起点となるアドレスを変更できるため、結果的には一定の領域に対して自在に読み書きできます)。

メモリは「主記憶」と呼ばれ、CPUが演算をするための一時的な記憶領域です。一方ディスクは「外部記憶」と呼ばれ、長期的・半永久的な記憶領域です ※2 。ディスク上の情報はCPUが直接扱えないため、いったんメモリに読み込んで処理します。プログラムではメモリ上のデータを書き換え、それをディスクに書き出して長期的に保存します。

基本的には、この長期記憶――ディスクに記録された情報をOSがファイルとして扱うことになります。

暗喩。複雑な概念やメカニズムなどを、他のイメージしやすいものに置き換えること。たとえばWindowsのゴミ箱アイコンは、ディスク上のファイルを(段階的に)削除するというファイル管理機能のメタファ
厳密に言うと、主記憶と外部記憶を合わせて「メモリ」と総称し、主記憶はメインメモリと呼びます。ただ、一般的には主記憶を「メモリ」、ディスクなどメモリ以外の記憶装置を外部記憶と呼んでいます

キーボードやディスプレイもファイル

UNIX系のOSやそれをお手本としたMS-DOS、WindowsなどのOSでは、外部記憶に記録されたファイルのほかに、コンソールモードでディスプレイに出力する文字列、プリンタに送る文字列、キーボードなどの入力装置から受け取る文字列もファイルとして扱うようになっています。

これらは長期記憶ではありませんが、OSが外部記憶に記録された情報と同じように扱うことで、ディスクに対する読み書きとキーボードからの入力やディスプレイへの出力などを、同じ手順で行えるようになります。この機能を「ファイルディスクリプタ」と呼びます。