fgetpos

获取流的文件位置指示器。

语法

int fgetpos(
   FILE *stream,
   fpos_t *pos
);

参数

stream
目标流。

pos
位置指示器存储。

返回值

如果成功,则 fgetpos 返回 0。 失败时,它返回一个非零值,并将 errno 设置为下列任一清单常量(在 STDIO.H 中定义):EBADFEINVAL,前者意味着指定流不是有效文件指针或不可访问,后者意味着 stream 值或 pos 的值无效,例如如果任意一个为空指针。 如果 streamposNULL 指针,此函数将调用无效参数处理程序,如参数验证中所述。

备注

fgetpos 函数获取 stream 参数的文件位置指示器的当前值,并将其存储在 pos 指向的对象中。 fsetpos 函数可以稍后使用存储在 pos 中的信息来重置在调用 fgetposstream 参数的指针所指向的位置。 pos 值以内部格式存储,且仅供 fgetposfsetpos 使用。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

函数 必需的标头
fgetpos <stdio.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// 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.txt

fgetpos gets a stream's file-position indicator.

输出:crt_fgetpos.txt

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

另请参阅

流 I/O
fsetpos