C言語でファイル処理を行うには、FILE構造体を使った宣言が必要になります。
こんな感じのやつです。
FILE *fp;
FILEは、ファイル構造体と呼ばれるものです。ファイル構造体はファイルポインタとも呼ばれています。
*fpの部分の「fp」は、変数名です。
だから別の名称でもいいのですが、通常この変数は、ファイルポインタと呼ばれているので「fp」や「fp_1」などとすることが多いように思います。
「*」がついていますが、通常のポインタとはまた別ものです。
ファイルポインタは、fopen関数で指定したファイルのハードディスクやSSD上の位置を保存できる変数と覚えておいてください。あくまでイメージですよ!
要するにfopen関数を使って
fp = fopen (“hoge.txt”, “r”) ;
などとしてファイルを開けばプログラマとしては実際のfpの値がなんであろうとfpというファイルポインタ変数を使って、開いたファイルを操作できる、ということになります。
ですからファイルを閉じる際も
fclose ( fp );
のようにfclose関数の引数にfpを指定しています。
もしFILE構造体の変数fpを頭の中でイメージしたいのであれば、ハードディスクやSSD(以下補助記憶装置と記述)をまずはイメージしてみてください。
補助記憶装置には、皆さんが保存したファイルが保存されています。補助記憶装置には、メモリなどのように番地(番号)がついていると考えてみてください。
実際はWindowsのNTFS方式だとセクタと呼ばれる最小単位に分割して割り振られます。1セクタは512バイトです。ハード的には、8セクタ(4096バイト)を1単位としてディスクは読み取られます。でもここではあくまでC言語のFILE構造体のイメージを頭で想像するために単純に補助記憶装置上には番地が割り振られていて、ファイルを特定する際は、ファイルが保存されている番地で確定できる、と考えて頂ければ十分です。
ですから皆さんが、「hoge.txt」というファイルを保存した場合、補助記憶装置のどこかの番地を先頭に「hoge.txt」の内容が書き込まれている訳です。
もし、補助記憶装置上の1000番地を先頭にhoge.txtの中身が保存されているとすれば、
プログラムで
FILE *fp;
fp = fopen(“hoge.txt”, “r”);
とした場合、ファイル構造体変数のfpには「補助記憶装置上の1000番地」という情報が保存される、と考えると理解しやすいかと思います。
実際はそこまで単純ではないのであくまでイメージです!
コメント