获取流的文件位置指示器。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 中定义):EBADFEINVAL,前者意味着指定流不是有效文件指针或不可访问,后者意味着 stream 值或 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. 如果 streamposNULL 指针,此函数将调用无效参数处理程序,如参数验证中所述。If stream or pos is a NULL pointer, the function invokes the invalid parameter handler, as described in Parameter Validation.


fgetpos 函数获取 stream 参数的文件位置指示器的当前值,并将其存储在 pos 指向的对象中。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. fsetpos 函数可以稍后使用存储在 pos 中的信息来重置在调用 fgetposstream 参数的指针所指向的位置。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 值以内部格式存储,且仅供 fgetposfsetpos 使用。The pos value is stored in an internal format and is intended for use only by fgetpos and fsetpos.


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

有关其他兼容性信息,请参见“简介”中的 兼容性For additional compatibility information, see Compatibility in the Introduction.


// 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/O Stream I/O