fseekは指定されたファイルのアクセス位置をセットするC標準ライブラリ関数・・・。
の1番目がfseek・・・。
ファイルポインタ、基準位置から何バイト目か、基準位置(先頭からなのか、末尾からなのか、など)、って感じで指定する・・・。
これを使うことで、ファイルを開いた後、任意のアクセス位置に移動して読み書き(ランダムアクセス)ができる・・・。
fwrite、freadの頁で使ったprof.binを読み込んで、年齢だけ取り出してみる・・・。
年齢ageとファイルポインタfpだけ用意・・・。
バイナリ読み込みで開く・・・。
prof.binには、struct_tag_profile型のバイナリデータが書き込まれている・・・。
/* 構造体タグstruct_tag_profileの定義 */ struct struct_tag_profile{ /* 簡易名簿 */ char name[32]; /* 名前 */ int age; /* 年齢 */ char address[128]; /* 住所 */ };
こんなんだったとおもう・・・。
nameが、sizeof(char) * 32 = 1 * 32 = 32バイトなので、
この分だけ移動するとageの先頭にアクセスできそう・・・。
SEEK_SETは「先頭から」という意味のマクロ定数・・・。
つまり、先頭から32バイト移動せよということ・・・。
この状態でfreadで読み込み・・・。
ageのアドレスを&ageで指定し、サイズはsizeof(age)、これで格納してくれる・・・。
ageを出力・・・。
そして、ファイルを閉じる・・・。
実行してみよう・・・。
$ ls fseek fseek.c prof.bin $
この状態で、
$ ./fseek age: 20 $
ageだけを取り出すことができた・・・。