ファイル操作の補足解説

ファイルの終端 EOF (End Of File)

入出力ルーチンがファイルの終端に達したとき (またはエラーの場合) にはEOFが返される.EOFはファイルの終わりを表す記号定数で,stdio.hの中で定義されている.

標準入出力

定義済みのファイルポインタには,

の3つがある.標準入力,標準出力,標準エラー出力は,プログラムの開始時にOSによって自動的に用意されるファイルである.通常stdinはキーボード,stdout,stderrは画面につながれている.

perror

システムエラーメッセージを表示する関数.表示する文字列メッセージを引数とする関数であり,戻り値はない. プロトタイプ宣言は以下のようになっている.

void perror(const char* string);

最初に string が表示され、次にコロン、さらにエラーを起こした最後のライブラリ呼び出しのシステムエラーメッセージと続き、最後に改行文字が出力される.string を NULL ポインタまたは NULL 文字列へのポインタにすると、perror 関数はシステム エラー メッセージだけを表示する.

ファイルオープンの後で呼び出すperror 関数には,エラーの原因を特定しやすくするため,引数としてファイル名を与えてもよい.

ファイル操作に関するその他の関数

int feof( FILE *fp );

feof 関数は,ファイルの終端をチェックする関数である.現在のファイルポインタの位置が「ファイル終端の場合 0 以外の値」,「ファイルの終端でない場合は 0 」を返す.

int fseek( FILE *fp, long offset, int origin );

fseek関数は,指定された位置にファイルポインタを移動する関数である.fpに結合されているファイルポインタがあるときに,初期位置 origin から offset バイトファイルポインタを移動する.originとして指定できるのは,SEEK_CUR(ファイルポインタの現在位置), SEEK_END(ファイルの終端), SEEK_SET(ファイルの先頭)の3種である.

フォルダ(ディレクトリ)の階層構成とパスの関係

パス

パス(path)とは,ファイルやフォルダがある場所までの経路,あるいはその経路を表す文字列のことを指す.MS-DOSやWindowsでは,フォルダ名を"\"で区切って表すが,LinuxなどUNIX系のOSでは"/"(スラッシュ)で区切っている.

絶対パス

ハードディスクなどの外部記憶装置のファイルの階層構成は,MS-DOSやWindowsではドライブ名(「C:\」など)を頂点とする木構造になっている.これに沿って階層の頂点から目的のファイルやフォルダまでの経路を記述したものを「絶対パス」という.例えば,”Zドライブにある,kadai4というフォルダ中のex4_1というフォルダ中のDebugというフォルダ”は以下のように記述する.

Z:\kadai4\ex4_1\Debug

相対パス

これに対し,起点となる現在位置(カレントディレクトリ)から,目的のファイルやフォルダまでの経路を記述したものを「相対パス」という.起点となるフォルダは「.」で,上位フォルダは「..」で表される.例えば「..\ex4_1.c」という記述は,現在のフォルダの一階層上位にあるフォルダの中にある「ex4_1.c」というファイルを意味する.

参考:パンくずリスト(breadcrumbs list, 別名:トピックパス topic path)

上記のパスの説明は,PCのファイルシステムの話であったが,WEBサイトの階層構造を表現する際にも同様の考え方が使用される.階層的にカテゴリ分けされたオンラインショッピングサイトの隅に,

本 > 科学 > コンピュータ

のようにそのカテゴリに到達するまでのリンクが順に並んでいるのを見たことがあるだろう.これをパンくずリストという.パンくずリストでは階層を">"で区切って表す.パンくずという言い方は童話「ヘンゼルとグレーテル」に由来する.