fgetpos

ファイル位置の取得

【書式】
#include <stdio.h>
int fgetpos(FILE *fp, fpos_t *pos);

【説明】
ファイルfpの現在のファイル位置を取得して、posの示す場所に格納します。
fgets関数などによりファイルに対して入出力を行うと、その入出力のサイズに応じてファイル位置が更新されます。処理によっては、更新させず、元の位置に次の入出力を行いたい場合も生じます。そういう場合に、ファイル入出力を行う前に、fgetpos関数を用いてファイル位置を取得し、fsetpos関数でファイル位置の設定を行います。

【引数】
FILE *fp  : FILEポインタ
fpos_t *pos : ファイル位置の格納先
          fpos_t型は、stdio.hの中で宣言されています。

【戻り値】
正常時 : =0
異常時 : ≠0
       ※ 異常時には、errnoに処理系定義のエラーNo.を設定します。
          errnoについては、perror関数を参照してください。

【使用例】
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        FILE *fp;
        fpos_t fpos, tmppos;
        char    s[256];

        if((fp = fopen("TEMP.FIL", "w+")) == NULL ) {
                fprintf(stderr,"入力ファイルオープンエラー\n");
                exit(EXIT_FAILURE);
        }

        /* ファイル位置の退避 */
        fgetpos(fp, &fpos);
        printf("最初のファイル位置: %ld\n", fpos);

        /* ファイルに7文字書き込み */
        fputs("ABCDEFG",fp);

        fgetpos(fp, &tmppos);
        printf("書き込み後のファイル位置: %ld\n", tmppos);

        /* ファイル位置を元に設定 */
        if(fsetpos(fp, &fpos) == 0) {
                fgetpos(fp, &tmppos);
                printf("元に戻したファイル位置: %ld\n", tmppos);
                fgets(s, sizeof(s), fp);
                printf("ファイル内容: %s\n",s);
        }
        else {
                fprintf(stderr, "fsetpos 異常\n");
                exit(EXIT_FAILURE);
        }

        fclose(fp);
        return 0;
}
【実行結果】
最初のファイル位置: 0
書き込み後のファイル位置: 7
元に戻したファイル位置: 0
ファイル内容: ABCDEFG

戻る


banner
初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved