fgetpos
获取流的文件位置指示器。
语法
int fgetpos(
FILE *stream,
fpos_t *pos
);
参数
stream
目标流。
pos
位置指示器存储。
返回值
如果成功,则 fgetpos
返回 0。 失败时,它返回一个非零值,并将 errno
设置为下列任一清单常量(在 STDIO.H 中定义):EBADF
或 EINVAL
,前者意味着指定流不是有效文件指针或不可访问,后者意味着 stream
值或 pos
的值无效,例如如果任意一个为空指针。 如果 stream
或 pos
为 NULL
指针,此函数将调用无效参数处理程序,如参数验证中所述。
备注
fgetpos
函数获取 stream
参数的文件位置指示器的当前值,并将其存储在 pos
指向的对象中。 fsetpos
函数可以稍后使用存储在 pos
中的信息来重置在调用 fgetpos
时 stream
参数的指针所指向的位置。 pos
值以内部格式存储,且仅供 fgetpos
和 fsetpos
使用。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 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