fseek, _fseeki64

指定した場所にファイル ポインターを移動します。

構文

int fseek(
   FILE *stream,
   long offset,
   int origin
);
int _fseeki64(
   FILE *stream,
   __int64 offset,
   int origin
);

パラメーター

stream
FILE 構造体へのポインター。

offset
origin から読み取られたバイト数。

origin
最初の位置。

戻り値

正常に終了した場合、fseek および _fseeki64 は 0 を返します。 それ以外の場合は、0 以外の値を返します。 シーク非対応のデバイスでは、戻り値は未定義です。 null ポインターの場合stream、または以下で説明する使用可能な値の 1 つでない場合originは、「 fseek_fseeki64パラメーターの検証」の説明に従って無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、-1 を返します。

解説

および関数はfseek、ファイル ポインター (存在する場合) stream をバイトoriginの新しい場所offsetに移動_fseeki64します。 ストリームの次の操作は、新しい場所で行われます。 更新用に開かれているストリームでの次の操作は読み取りまたは書き込みのいずれかです。 引数 origin は、STDIO.H で定義されている、次の定数のいずれかである必要があります。

origin 値 意味
SEEK_CUR ファイル ポインターの現在の位置。
SEEK_END ファイルの終わり。
SEEK_SET ファイルの先頭。

fseek_fseeki64 を使用して、ファイル内の任意の場所にポインターを移動できます。 ポインターは、ファイルの末尾を越えて配置することもできます。 fseek および _fseeki64 では、ファイルの終わりインジケーターをクリアし、stream に対する ungetc 呼び出しの前のすべての効果を反転します。

データを追加するためにファイルを開く場合、現在のファイルの位置は、次の書き込みが発生する場所ではなく最後の I/O 操作によって決まります。 追加のために開かれたファイルで I/O 操作がまだ発生していない場合、ファイルの位置はファイルの先頭です。

テキスト モードで開いたストリームの場合、fseek および _fseeki64 の使用は制限されます。これは、復帰と改行の変換により、fseek および _fseeki64 で予期しない結果が発生する可能性があるためです。 テキスト モードで開かれたストリーム上でのみ fseek および _fseeki64 の動作が保証されます。

  • 元の値のいずれかに対して相対的なオフセット 0 でシークします。

  • fseek または _ftelli64 を使用するとき、または _fseeki64 を使用するときは、ftell に対する呼び出しから返されるオフセット値を使用してファイルの先頭からシークします。

テキスト モードでも、Ctrl + Z は入力時に EOF (EOF: end-of-file) 文字として解釈されます。 読み取りおよび書き込みの両方のために開かれたファイルでは、fopen および関連するすべてのルーチンが、ファイル末尾に Ctrl + Z があるかどうかを確認し、削除できる場合は削除します。 CTRL + Z で終わるファイル内fseekを移動する場合、ftellまたは _ftelli64、または _fseeki64 、 を組み合わせて使用すると、ファイルの末尾付近で不適切な動作が発生fseek_fseeki64する可能性があるため、削除されます。

CRT がバイト オーダー マーク (BOM) で始まるファイルを開くと、ファイル ポインターは BOM の後に配置されます。 (つまり、ファイルの実際のコンテンツの先頭に配置されます)。 ファイルの先頭に移動するfseek必要がある場合は、最初の位置を取得してからfseek、位置 0 ではなくその位置に移動ftellします。

この関数では、実行中に他のスレッドをロックするので、スレッド セーフです。 ロックしないバージョンについては、「_fseek_nolock_fseeki64_nolock」を参照してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

機能 必須ヘッダー
fseek <stdio.h>
_fseeki64 <stdio.h>

互換性の詳細については、「 Compatibility」を参照してください。

// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char line[81];
   int  result;

   if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
   {
      printf( "The file fseek.out was not opened\n" );
      return -1;
   }
   fprintf( stream, "The fseek begins here: "
                    "This is the file 'fseek.out'.\n" );
   result = fseek( stream, 23L, SEEK_SET);
   if( result )
      perror( "Fseek failed" );
   else
   {
      printf( "File pointer is set to middle of first line.\n" );
      fgets( line, 80, stream );
      printf( "%s", line );
    }
   fclose( stream );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.

関連項目

ストリーム入出力
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rewind