読者です 読者をやめる 読者になる 読者になる

fseek

fseekは指定されたファイルのアクセス位置をセットするC標準ライブラリ関数・・・。

Man page of FSEEK

の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だけを取り出すことができた・・・。

Sample/fseek.c at master · bg1bgst333/Sample · GitHub