ftell、_ftelli64
ファイル ポインターの現在位置を取得します。
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
パラメーター
- stream
ターゲットの FILE の構造体。
戻り値
ftell と _ftelli64 はファイルの現在の位置を返します。ftell と _ftelli64 によって返される値はテキスト モードでは復帰とライン フィードの移動を発生させることなくテキスト モードで開かれたストリームの物理的なバイト オフセットを表さない場合があります。ファイルの場所に正しく返すために fseek の ftell または _fseeki64 の _ftelli64 を使用します。エラーの場合ftell と _ftelli64 は パラメーターの検証 に説明されているように無効なパラメーター ハンドラーを呼び出します。実行の継続が許可された場合これらの関数は 2 回の定数の 1 に設定し– 1L. errnoERRNO.H で定義されて返されます。EBADF の定数は stream の引数に有効なファイル ポインターの値ではなく開いているファイルを参照しないことを意味します。EINVAL は stream の無効な引数が関数に渡されたことを意味します。検索できないデバイスで stream が開いているファイルが表示されない場合 (端末やプリンターなど) または戻り値は未定義です。
これらの詳細については_doserrnoerrno_sys_errlist と _sys_nerr とそのほかのリターン コード " " を参照してください。
解説
ftell と _ftelli64 の 関数は stream に関連付けられたファイル ポインターの現在の位置を取得します (存在する場合)*。*場所はストリームの先頭を基準とするオフセットを表します。
次の書き込みがどこで発生したかがデータを追加するために開くとファイルの現在の位置を最後の I/O 操作になります。ではなく注意してください。たとえばファイルを追加するためにその最後の操作が読み取りファイルの場所は次の書き込みを開始する場合は次の読み取り操作を開始するポイントです。ファイルを追加するために開くとファイルの場所は書き込み操作の前に EOF が見つかりました。に移動されます)。I/O 操作を追加するために開くファイルに発生しないファイルの場所はファイルの先頭です。
テキスト モードではCTRL+Z では入力のファイルの終端の文字として解釈されます。ファイルの末尾に読み取り / 書き込みのためにCtrl キーの fopen と関連するすべての定期検査を開くファイルでは可能であれば削除します。これは ftell の組み合わせと fseek または _ftelli64 と _fseeki64 使用するとCTRL+Z で終わるファイル内で移動するためにftell または _ftelli64 はファイルの末尾の近くで不適切に実行されることがあるためです。
この関数は実行時に呼び出し元スレッドをロックしスレッド セーフです。ロックされていないバージョンについては_ftell_nolock を参照してください。
必要条件
Function |
必須ヘッダー |
省略可能なヘッダー |
---|---|---|
ftell |
<stdio.h> |
<errno.h> |
_ftelli64 |
<stdio.h> |
<errno.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_ftell.c
// This program opens a file named CRT_FTELL.C
// for reading and tries to read 100 characters. It
// then uses ftell to determine the position of the
// file pointer and displays this position.
#include <stdio.h>
FILE *stream;
int main( void )
{
long position;
char list[100];
if( fopen_s( &stream, "crt_ftell.c", "rb" ) == 0 )
{
// Move the pointer by reading data:
fread( list, sizeof( char ), 100, stream );
// Get position after read:
position = ftell( stream );
printf( "Position after trying to read 100 bytes: %ld\n",
position );
fclose( stream );
}
}