fgetpos
fgetpos
在头文件 | | |
---|---|---|
int fgetpos(FILE * stream,fpos_t * pos); | | (直到C99) |
int fgetpos(FILE * restrict stream,fpos_t * restrict pos); | | (自C99以来) |
获取文件流的文件位置指示器和当前解析状态(如果有)stream
并将它们存储在指向的对象中pos
。存储的值只对输入有意义fsetpos
。
参数
流 | - | 文件流来检查 |
---|---|---|
岗位 | - | 指向fpos_t对象以存储文件位置指示符的指针 |
返回值
0
一旦成功,否则非零值。
例
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main(void)
{
// prepare a file holding 4 values of type double
enum {SIZE = 4};
FILE* fp = fopen("test.bin", "wb"
assert(fp
int rc = fwrite((double[SIZE]){1.1, 2.2, 3.3, 4.4}, sizeof(double), SIZE, fp
assert(rc == SIZE
fclose(fp
// demo using fsetpos to return to the beginning of a file
fp = fopen("test.bin", "rb"
fpos_t pos;
fgetpos(fp, &pos // store start of file in pos
double d;
rc = fread(&d, sizeof d, 1, fp // read the first double
assert(rc == 1
printf("First value in the file: %.1f\n", d
fsetpos(fp,&pos // move file position back to the start of the file
rc = fread(&d, sizeof d, 1, fp // read the first double again
assert(rc == 1
printf("First value in the file again: %.1f\n", d
fclose(fp
// demo error handling
rc = fsetpos(stdin, &pos
if(rc) perror("could not fsetpos stdin"
}
输出:
First value in the file: 1.1
First value in the file again: 1.1
could not fsetpos stdin: Illegal seek
参考
- C11标准(ISO / IEC 9899:2011):