3.3 ファイルとバッファ

図 2は, コンピュータの構造を, これまでに行ったことを理解するために必要な部分に限って, ごく簡単に表現したものです。

CPU (central processing unit)
はコンピュータの頭脳にあたる役割をし, コンピュータの動作を制御したり,様々な計算を行います。

主記憶装置 (main memory; 以下,単にメモリと呼ぶ)
は, 実行中のプログラムやデータを格納する場所です。 CPU は,処理に必要なデータをメモリから読み取り, 処理結果をメモリに書き込みます。

Emacs が動いているときには, Emacs のプログラムや編集中のテキスト (文書) はメモリにあります。 Emacs がテキストを保持するために使うメモリ内の領域を, Emacs の用語でバッファ (buffer) といいます。

メモリに対するデータの読み書きは高速に行えますが, メモリの容量は比較的小さく, メモリ内のデータはコンピュータを停止すると消えてしまいます。 そのため,メモリはデータの永続的な保存には使えません。

補助記憶装置
はメモリに比べて動作が遅い反面, 記憶容量が大きく,中身はコンピュータを停止しても消えません。 ファイルは補助記憶装置にあります。

図 2: ファイルとバッファ
\includegraphics[clip]{editor/file-buffer.eps}

さて,Emacs のウィンドウに表示されるテキストは, ファイルではなく,バッファの内容です。 したがって,Emacs でファイルを作成・編集するには, まず,そのためのバッファを用意する必要があります。 これを行うのが File -> Open File... (C-x C-f) です。 この操作ではファイル名を入力しますが, その名のファイルが存在しなければ,同名の空のバッファが用意されます (第 3.1 節 ファイルの新規作成)。 ファイルが存在すれば,ファイルは同名のバッファに読み込まれます (第 3.2節 既存ファイルの編集)。 なお,バッファに読み込まれるのはファイルの内容のコピーですから, ファイルを読み込んでも元のファイルが無くなる訳ではありません。

Emacs を終了するとバッファは消えるので, 保存したいバッファの内容はファイルに入れる必要があります。 それをするのが File -> Save (current buffer) (C-x C-s) です。

編集中のバッファが保存済かどうかは, モード行 (下から 2 行目) におけるバッファ名の左側の表示でわかります。 ここが -- から ** に変わったら, バッファとファイルの内容に違いが生じたこと, すなわち,バッファの内容を変更したのに未保存であることを表しています。

では,上記のことを確認するために, 以下の操作を行いましょう。

  1. Emacs が起動していなければ, emacs & と打って起動してください。 commands をバッファに読み込んでいなければ, 読み込む操作をしてください。

  2. Emacs のウィンドウに表示されている, commands という名のバッファを消してみます。
    File -> Close (current buffer)
    を実行してください。

  3. ls コマンドを使って, 消したバッファと同じ名前のファイルが存在することを確認してください。
    バッファを消してもファイルは消えませんね。

  4. Emacs を終了せずに,引き続き commands を編集するにはどうしたらいいでしょう?
    ファイル commands を再度バッファに読み込んでください。

  5. Emacs のモード行 (下から 2 行目) に表示されているバッファ名 commands のすぐ左側の表示が -- であることを確認してから, バッファ (Emacs のウィンドウ) 3 行目の cat の説明を
    cat - concatenate and print files
    に変更してください。

    モード行の表示が ** に変わりましたね。

  6. UNIX のコマンドでファイル commands の内容を確認してください。
    バッファの内容を変更しただけでは,ファイルは変わりません。

  7. バッファの内容をファイルに保存してください。
    モード行の表示が - になりましたね。 バッファとファイルの内容が同じになりました。

  8. ファイル commands の中身を確認してください。