fsetpos
来自 cppreference.com
定义在头文件 <stdio.h> 中 |
||
根据 pos
指向的值设置文件流 stream
的文件位置指示器和多字节解析状态(如果有)。
除了建立新的解析状态和位置,调用此函数还会撤消 ungetc 的影响,并清除文件结束状态(如果已设置)。
如果发生读或写错误,则会设置流的错误指示器 (ferror)。
内容 |
[编辑] 参数
stream | - | 要修改的文件流 |
pos | - | 指向 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; read count = %d\n", B[0], ret_code); /* print one f-p value and ret_code */ 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; read count = %d\n", B[0], ret_code); /* print one f-p value and ret_code */ fclose(fp); return EXIT_SUCCESS; }
输出
1.0; read count = 1 1.0; read count = 1