fsetpos
fsetpos
在头文件 | | |
---|---|---|
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.0
1.0
参考
- C11标准(ISO / IEC 9899:2011):