fsetpos
来自cppreference.com
在标头 <stdio.h> 定义
|
||
按照 pos
所指向的值,设置文件流 stream
的文件位置指示器和多字节分析状态(若存在)。
调用此函数,除了建立新的分析状态和位置,还会撤销 ungetc 的效果,且若设置了文件尾状态则清除之。
若读或写出现错误,则设置流的错误指示器( ferror )。
参数
stream | - | 要修改的文件流 |
pos | - | 指向 fpos_t 对象的指针,用作文件位置指示器的新值 |
返回值
成功时为 0 ,否则为非零值。
注意
在寻位到宽流的非结尾位置后,下个对任何输出函数的调用可能使剩下的文件内容未定义,例如通过输出不同长度的多字节序列。
示例
fsetpos 带错误检查
运行此代码
#include <stdio.h> #include <stdlib.h> int main(void) { /* 准备一个浮点值的数组。 */ #define SIZE 5 double A[SIZE] = {1.,2.,3.,4.,5.}; /* 写数组到文件。 */ FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); /* 读取浮点值到数组B。 */ double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp,&pos) != 0) /* 当前位置:文件起始 */ { 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); /* 读取一个浮点值 */ /* 当前位置:在读一个浮点值后 */ printf("%.1f; read count = %d\n", B[0], ret_code); /* 打印一个浮点值和 ret_code */ if (fsetpos(fp,&pos) != 0) /* 重设当前位置为文件起始 */ { 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); /* 重读首个浮点值 */ printf("%.1f; read count = %d\n", B[0], ret_code); /* 打印一个浮点值和 ret_code */ fclose(fp); return EXIT_SUCCESS; }
输出:
1.0; read count = 1 1.0; read count = 1