HIR-NET Home
運営者
オンラインソフト
運営者著書
CG
HIR-NETリンク集
C言語辞典
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| …… 先の位置に戻ります
HIR-NET Home
運営者
オンラインソフト
運営者著書
CG
HIR-NETリンク集
◆リンクは、ご自由にお張りください。
Copyright © 1988-2017 Hirabayashi Masahide プライバシーポリシー