データ保存の仕組み
ファイル管理はOSの機能。
以下の手続きを行ってファイルを扱うOSが多い。
- ファイルをオープンする
- 読み書きをする
- ファイルをクローズする
ファイルをオープンをもっと詳しく
- プログラムがOSに対してファイルのオープンを依頼
- OSは指定されたファイルをプログラムが操作できるように設定
- そのファイルに関する情報をプログラムに渡す
- プログラムはその情報をもとにファイルの状態を把握
C言語でファイルを開く
C言語ではこれらがFILE型の構造体にまとめられている。
Cでは、オープンしたファイルをFILE型の構造体(FILE構造体)へのポインタを介してアクセスする。
- fopen関数でファイルのオープンに成功する
- オープンしたファイルに関する情報を記録したFILE構造体が準備され、fopen関数からそれへのポインタが返される
- オープン後はファイルポインタを介してファイルに対する読み書きをなどの操作を行う
ファイルを開くプログラム
#include <stdio.h>
int main(void) {
// ファイルを開く
FILE *fpointer = fopen("data.txt","r");return 0;
}
fopen関数でファイルをオープンするとメモリ上にFILE型の構造体が生成され、fopen関数はそれへのポインタを返す(ファイルポインタ)。
FILE型構造体のポインタ
「FILE *fp;」はFILE型のポインタであり、FILE構造体の実態はfopen関数が生成する。
オープンに成功した後は、このファイルポインタを引数としてファイル操作関数を呼び出し、ファイルを操作します。
構造体
変数の型の種類のひとつで、中に入れられる物の種類や数を自分で決められるやつ
https://wa3.i-3-i.info/word13243.html
ポインタ変数
- 変数である
- 値として(他の変数の)メモリ上のアドレスを取る
- ポインタ変数を経由して、他の変数の中身を見たり変更したりできる
https://wa3.i-3-i.info/word12814.html
ファイルを閉じてメモリを開放する
ファイルをクローズする処理をしないと使われないメモリ領域が残ったままになるので注意。
参考
「C言語」の「ファイル操作の仕組み」とプログラムの書き方を学ぼう! | ~プログラミングライフスタイル~
もう一度基礎からC言語 第37回 ファイルの扱い(2)~ファイル操作の実例 FILE構造体の中身
もう一度基礎からC言語 第36回 ファイルの扱い(1)~オープン/クローズと読み書き オープンとクローズ
コンピュータで、「ファイルを開く」という概念がよく理解できま… - 人力検索はてな
ハードディスクが物理的にデータを記録している仕組みがわかるムービー「How do hard drives work?」 - GIGAZINE