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 以外の値を返します。 シーク非対応のデバイスでは、戻り値は未定義です。 stream
が null ポインターの場合、またはorigin
が以下で説明する使用可能な値の 1 つでない場合は、「Parameter 検証で説明されているように、無効なパラメーター ハンドラーfseek
および_fseeki64
呼び出します。 実行の継続が許可された場合、これらの関数は errno
を EINVAL
に設定し、-1 を返します。
解説
fseek
関数と_fseeki64
関数は、stream
に関連付けられているファイル ポインター (存在する場合) を、origin
からoffset
バイトの新しい場所に移動します。 ストリームの次の操作は、新しい場所で行われます。 更新用に開かれているストリームでの次の操作は読み取りまたは書き込みのいずれかです。 引数 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 があるかどうかを確認し、削除できる場合は削除します。 fseek
とftell
または_fseeki64
と_ftelli64
の組み合わせを使用して、Ctrl + Z で終わるファイル内を移動すると、ファイルの末尾付近でfseek
または_fseeki64
が不適切に動作する可能性があるため、削除されます。
CRT がバイト オーダー マーク (BOM) で始まるファイルを開くと、ファイル ポインターは BOM の後に配置されます。 (つまり、ファイルの実際のコンテンツの先頭に配置されます)。 ファイルの先頭に fseek
する必要がある場合は、 ftell
を使用して初期位置を取得し、0 ではなくその位置に fseek
します。
この関数では、実行中に他のスレッドをロックするので、スレッド セーフです。 ロックしないバージョンについては、「_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