名前空間
変種
操作

fseek

提供: cppreference.com
< c‎ | io
 
 
ファイル入出力
関数
ファイルアクセス
直接入出力
書式なし入出力
(C11以前)(C11およびそれ以降)
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)
書式付き入力
書式付き出力
ファイル位置操作
fseek
エラー処理
ファイルに対する操作
 
ヘッダ <stdio.h> で定義
int fseek( FILE *stream, long offset, int origin );

ファイルストリーム stream のファイル位置指示子を offset の指す値に設定します。

stream がバイナリモードで開かれている場合、新しい位置は、 originSEEK_SET であればファイルの先頭から、 originSEEK_CUR であれば現在のファイル位置から、 originSEEK_END であればファイルの終端から測って、ちょうど offset バイトになります。 バイナリストリームは SEEK_END をサポートすることが要求されません (特に追加のヌルバイトが出力される場合)。

stream がテキストモードで開かれている場合、 offset に対してサポートされている値は、ゼロ (任意の origin に適用可能) および同じファイルに紐付けられているストリームに対する以前の ftell の呼び出しによって返された値 (originSEEK_SET の場合にのみ適用可能) だけです。

stream がワイド指向の場合、テキストストリームとバイナリストリーム両方の制限が適用されます (ftell の結果は SEEK_SET でのみ使用でき、ゼロは SEEK_SET および SEEK_CUR で使用できますが SEEK_END は使用できません)。

ファイル位置指示子の変更に加えて、 fseekungetc の効果を取り消し、ファイル終端ステータスをクリアします。

読み込みまたは書き込みエラーが発生した場合は、ストリームのエラー指示子 (ferror) が設定され、ファイル位置は影響を受けません。

目次

[編集] 引数

stream - 変更するファイルストリーム
offset - origin からの相対位置を変更する文字数
origin - offset を加算する位置。 SEEK_SET, SEEK_CUR, SEEK_END のいずれかを指定できます

[編集] 戻り値

成功した場合は 0、そうでなければ非ゼロの値。

[編集] ノート

ワイドストリームで非終端位置にシークした後の、次の任意の出力関数の呼び出しは、例えば異なる長さのマルチバイトシーケンスを出力することによって、ファイルの残りを未定義の状態にします。

テキストストリームに対しては、有効な offset の値は 0 (任意の origin に適用可能) および ftell の以前の呼び出しによって返された値 (SEEK_SET にのみ適用可能) だけです。

POSIX は既存のファイル終端を超えてシークすることを許しています。 このシークの後で出力を行なった場合、その隙間からの読み込みはゼロのバイト列を返します。 ファイルシステムがサポートしていれば、これはスパースファイルを作成します。

POSIX はまた、何らかのまだ書き込まれていないデータがある場合、 fseek はまず fflush を行うことを要求しています (しかしシフト状態が復元されるかどうかは処理系定義です)。

[編集]

fseek をエラーチェック付きで使用します。

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    /* Prepare an array of f-p values. */
    #define SIZE 5
    double A[SIZE] = {1.,2.,3.,4.,5.};
    /* Write array to a file. */
    FILE * fp = fopen("test.bin", "wb");
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
 
    /* Read the f-p values into array B. */
    double B[SIZE];
    fp = fopen("test.bin","rb");
 
    /* Set the file position indicator in front of third f-p value. */
    if (fseek(fp,sizeof(double)*2L,SEEK_SET) != 0)
    {
       if (ferror(fp))
       {
          perror("fseek()");
          fprintf(stderr,"fseek() failed in file %s at line # %d\n", __FILE__,__LINE__-5);
          exit(EXIT_FAILURE);
       }
    }
 
    int ret_code = fread(B,sizeof(double),1,fp);   /* read one f-p value  */
    printf("%.1f\n", B[0]);                        /* print one f-p value */
 
    fclose(fp);
    return EXIT_SUCCESS;
}

出力:

3.0

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.9.2 The fseek function (p: 336-337)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.9.2 The fseek function (p: 302-303)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.9.2 The fseek function

[編集] 関連項目

ファイル位置指示子をファイル内の指定の場所に移動します
(関数) [edit]
ファイル位置指示子を取得します
Original:
gets the file position indicator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(関数) [edit]
現在のファイル位置指示子を返します
Original:
returns the current file position indicator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(関数) [edit]
ファイル位置指示子をファイルの先頭に移動します
(関数) [edit]