获取流的文件位置指示器。Gets a stream's file-position indicator.


int fgetpos(
   FILE *stream,
   fpos_t *pos


目标流。Target stream.

位置指示器存储。Position-indicator storage.

返回值Return Value

如果成功, fgetpos返回 0。If successful, fgetpos returns 0. 在失败时,它将返回一个非零值,并将设置errno下列其中一清单常量 (在 STDIO 中定义。H): EBADF,这意味着指定的流不是有效的文件指针或不可访问,或EINVAL,这意味着值或的值pos是无效的如或者为 null 指针。On failure, it returns a nonzero value and sets errno to one of the following manifest constants (defined in STDIO.H): EBADF, which means the specified stream is not a valid file pointer or is not accessible, or EINVAL, which means the stream value or the value of pos is invalid, such as if either is a null pointer. 如果posNULL指针,函数将调用无效参数处理程序,如中所述参数验证.If stream or pos is a NULL pointer, the function invokes the invalid parameter handler, as described in Parameter Validation.


Fgetpos函数获取的当前值自变量的文件位置指示器和存储它的对象中指向posFsetpos函数更高版本可以使用信息存储在pos重置时其位置的自变量的指向fgetpos调用。The fgetpos function gets the current value of the stream argument's file-position indicator and stores it in the object pointed to by pos. The fsetpos function can later use information stored in pos to reset the stream argument's pointer to its position at the time fgetpos was called. Pos值存储在内部格式,用于使用只能由fgetposfsetposThe pos value is stored in an internal format and is intended for use only by fgetpos and fsetpos.


函数Function 必需的标头Required header
fgetposfgetpos <stdio.h><stdio.h>

有关其他兼容性信息,请参阅 兼容性For additional compatibility information, see Compatibility.


// crt_fgetpos.c
// This program uses fgetpos and fsetpos to
// return to a location in a file.

#include <stdio.h>

int main( void )
   FILE   *stream;
   fpos_t pos;
   char   buffer[20];

   if( fopen_s( &stream, "crt_fgetpos.txt", "rb" ) ) {
      perror( "Trouble opening file" );
      return -1;

   // Read some data and then save the position.
   fread( buffer, sizeof( char ), 8, stream );
   if( fgetpos( stream, &pos ) != 0 ) {
      perror( "fgetpos error" );
      return -1;

   fread( buffer, sizeof( char ), 13, stream );
   printf( "after fgetpos: %.13s\n", buffer );

   // Restore to old position and read data
   if( fsetpos( stream, &pos ) != 0 ) {
      perror( "fsetpos error" );
      return -1;

   fread( buffer, sizeof( char ), 13, stream );
   printf( "after fsetpos: %.13s\n", buffer );
   fclose( stream );

输入:crt_fgetpos.txtInput: crt_fgetpos.txt

fgetpos gets a stream's file-position indicator.

输出:crt_fgetpos.txtOutput crt_fgetpos.txt

after fgetpos: gets a stream
after fsetpos: gets a stream

请参阅See also

流 I/OStream I/O