首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fsetpos

在头文件<stdio.h>中定义

int fsetpos(FILE * stream,const fpos_t * pos);

stream根据指向的值设置文件流的文件位置指示符和多字节解析状态(如果有)pos

除了建立新的解析状态和位置之外,如果设置了该函数,则对该函数的调用将撤销ungetc并清除文件结束状态的影响。

如果发生读取或写入错误,ferror则设置流的错误指示符()。

参数

-

文件流进行修改

岗位

-

指向fpos_t对象的指针,用作文件位置指示符的新值

返回值

​0​ 一旦成功,否则非零值。

注意

在宽流中寻找非终点位置之后,对任何输出函数的下一次调用可能会使文件的其余部分不确定,例如通过输出不同长度的多字节序列。

带有错误检查的fsetpos。

代码语言:javascript
复制
#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; 
}

输出:

代码语言:javascript
复制
1.0
1.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函数

扫码关注腾讯云开发者

领取腾讯云代金券