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):