HIR-NET Home C言語 運営者 オンラインソフト 運営者著書 CG HIR-NETリンク集

fgetposエフ・ゲット・ポス関数かんすう
fgetpos function

語源  fileファイオ getゲット positionション(ファイル位置収得)
分類  C/C++標準ライブラリ/関数/入出力関数/ファイル位置関数
名称  ファイル位置取得関数(file position getting function)
対義  fsetpos関数
類似  ftell関数
関連  fpos_t型, fseek関数
解説  fgetpos関数は、ファイルの位置を取得する関数です。ストリーム*stream のファイル位置指示子の値をファイル位置 *pos に格納します。格納された値は その値を得た位置へ、fsetpos関数が位置付けするための不定の情報を含んでいます。fgetpos関数と fsetpos関数を組み合わせれば、ファイルを先読みし、元の位置に戻すことが出来ます。このような目的には ftell関数と fseek関数の組み合わせよりも見通しがよいプログラムとなります。

関数原型宣言ヘッダ  <stdio.h>
関数原型宣言例
              ストリーム  ファイル位置の格納先
                   ↓            ↓
int fgetpos(FILE *stream,fpos_t *pos);
↓
0  :成功
非0:失敗
関数返却値
①成功した場合は 0 を返します。
②失敗した場合は非0 を返し、errno に処理系定義の正の値を代入します。

関数定義例  この定義例は fpos_t が long int である場合です。errno=35 は互換性はありません。
// fgetpos.c

#include <stdio.h> // FILE,fpos_t,ftell
#include <errno.h> // errno


int fgetpos( // ファイル位置関数  File GET POSition
// 0=成功
// 0≠失敗
FILE *stream, // ストリーム
fpos_t  *pos) // ファイル位置の格納先
{
   long int pos0=ftell(stream);
   if(pos0==-1L){errno=35;return -1;}
   *pos=pos0;
   return 0; // 成功
} // fgetpos


 プログラム例   

ファイル位置指示子の動き
バイナリ・ストリームでファイル位置指示子の動きを探ります。テキスト・ストリームでも結果は同じです。
// fgetpos1.c

#include <stdio.h> // FILE,fpos_t,fclose,feof,fgetc,fgetpos,fopen,fputs,fsetpos,printf
#include <stdlib.h> // EXIT_FAILURE, EXIT_SUCCESS


int main(void)
{
  void f(FILE *sget);
  FILE *sput; // 出力ストリーム
  FILE *sget; // 入力ストリーム
  fpos_t current;

  // ☆テストファイル作成
  sput=fopen("fgetpos.tes","wb"); // バイナリ
  if(sput==NULL)return EXIT_FAILURE;
  fputs("1234567890" // サンプル出力
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n",sput);
  fclose(sput);


  // ☆テストファイルオープン
  sget=fopen("fgetpos.tes","rb"); // バイナリ
  if(sget==NULL)return EXIT_FAILURE;

  f(sget); // 10バイト読込表示
  fgetpos(sget,¤t); // 現在位置
  f(sget);
  f(sget);
  fsetpos(sget,¤t); // 元の位置に
  f(sget);
  fclose(sget);

  return EXIT_SUCCESS;
} // main



void f( // 10バイト区切って表示する関数
FILE *sget) // 入力ストーム
{
  int i;
  for(i=0;i<10 && feof(sget)==0;i++)
    printf("|%c",fgetc(sget));
  printf("|\n");
} // f
実行結果
|1|2|3|4|5|6|7|8|9|0|
|A|B|C|D|E|F|G|H|I|J|
|K|L|M|N|O|P|Q|R|S|T|
|A|B|C|D|E|F|G|H|I|J|  …… 先の位置に戻ります





◆リンクは、ご自由にお張りください。

Copyright © 1988-2017 Hirabayashi Masahide  プライバシーポリシー