fseek、_fseeki64
指定した場所にファイル ポインターを移動します。
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
パラメーター
stream
FILE 構造体へのポインター。offset
origin のバイト数。origin
初期位置。
戻り値
0fseek と _fseeki64 が成功します。それ以外の場合はゼロ以外の値を返します。検索できないデバイスで戻り値は未定義です。stream が null ポインターの場合または origin は次の許可値の 1 つがである fseek と _fseeki64 は パラメーターの検証 に説明されているように無効なパラメーター ハンドラーを呼び出します。実行の継続が許可された場合、これらの関数は errno を EINVAL に設定し、-1 を返します。
解説
fseek と _fseeki64 の関数は origin から offset バイトの新しい場所に stream に関連付けられたファイル ポインターを移動します (存在する場合)*。*ストリームに対して次の操作が新しい場所にします。更新用に開いたストリームで次の操作には読み取りまたは書き込みを指定できます。引数の原点はSTDIO.H で定義された次の定数の 1 種類があります :
SEEK_CUR
ファイル ポインターの現在位置。SEEK_END
end of file。SEEK_SET
ファイルの先頭。
ファイル ポインターの任意の位置の変更に fseek と _fseeki64 を使用できます。ポインターはファイルの末尾に配置できます。fseek と _fseeki64 は ファイルの終端のインジケーターをオフにするとstream に対して ungetc の前の呼び出しの影響を無効にします。
ファイルにデータを追加するために開くとファイルの現在の位置は次の書き込みがどこで発生したか最後の I/O 操作によって決まります。I/O 操作を追加するために開くファイルに発生しないファイルの場所はファイルの先頭になります。
テキスト モードで開かれたストリームに復帰と改行の移動により fseek_fseeki64 と予期しない結果を生成できるためfseek と _fseeki64 に 制限されています。テキスト モードで開かれたストリーム で動作することが保証された _fseeki64 の fseek と操作 :
開始値のいずれかに対して 0 のオフセットで検索します。
オフセット値を持つファイルの先頭から検索が呼び出しを処理するときに使用するfseekfseek_ftelli64とにftell戻ります_fseeki64。
またテキスト モードではCTRL+Z では入力のファイルの終端の文字として解釈されます。ファイルの末尾に読み取り / 書き込みのためにCtrl キーの fopen と関連するすべての定期検査を開くファイルでは可能であれば削除します。これは fseek の組み合わせと ftell または _fseeki64 と _ftelli64 使用するとCTRL+Z で終わるファイル内で移動するためにfseek または _fseeki64 はファイルの末尾の近くで不適切に実行されることがあるためです。
CRT がバイト順マークで始まるファイルを開くと (BOM)ファイル ポインターは BOM の後に配置されます (つまりファイルが実際のコンテンツの開始時) これを開始位置と fseek を取得するファイル使用 ftell の先頭に fseek ではなく 0 を配置するためになります。
この関数は実行時に他のスレッドをロックおよびスレッド セーフです。ロックされていないバージョンについては_fseek_nolock、_fseeki64_nolock を参照してください。
必要条件
Function |
必須ヘッダー |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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 );
}