©
This document uses PHP Chinese website manual Release
在头文件<stdio.h>中定义 | ||
---|---|---|
int fsetpos(FILE * stream,const fpos_t * pos); |
stream
根据指向的值设置文件流的文件位置指示符和多字节解析状态(如果有)pos
。
除了建立新的解析状态和位置之外,如果设置了该函数,则对该函数的调用将撤销ungetc
并清除文件结束状态的影响。
如果发生读取或写入错误,ferror
则设置流的错误指示符()。
流 | - | 文件流进行修改 |
---|---|---|
岗位 | - | 指向fpos_t对象的指针,用作文件位置指示符的新值 |
0
一旦成功,否则非零值。
在宽流中寻找非终点位置之后,对任何输出函数的下一次调用可能会使文件的其余部分不确定,例如通过输出不同长度的多字节序列。
带有错误检查的fsetpos。
#include <stdio.h>#include <stdlib.h> int main(void){ /* Prepare an array of f-p values. */ #define SIZE 5 double A[SIZE] = {1.,2.,3.,4.,5.}; /* Write array to a file. */ FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); /* Read the f-p values into array B. */ double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp,&pos) != 0) /* current position: start of file */ { perror("fgetpos()"); fprintf(stderr,"fgetpos() failed in file %s at line # %d\n", __FILE__,__LINE__-3); exit(EXIT_FAILURE); } int ret_code = fread(B,sizeof(double),1,fp); /* read one f-p value */ /* current position: after reading one f-p value */ printf("%.1f\n", B[0]); /* print one f-p value */ if (fsetpos(fp,&pos) != 0) /* reset current position to start of file */ { if (ferror(fp)) { perror("fsetpos()"); fprintf(stderr,"fsetpos() failed in file %s at line # %d\n", __FILE__,__LINE__-5); exit(EXIT_FAILURE); } } ret_code = fread(B,sizeof(double),1,fp); /* reread first f-p value */ printf("%.1f\n", B[0]); /* print one f-p value */ fclose(fp); return EXIT_SUCCESS; }
输出:
1.01.0
C11标准(ISO / IEC 9899:2011):
7.21.9.3 fsetpos函数(p:337)
C99标准(ISO / IEC 9899:1999):
7.19.9.3 fsetpos函数(p:303)
C89 / C90标准(ISO / IEC 9899:1990):
4.9.9.3 fsetpos函数