命名空间
变体
动作

fsetpos

来自 cppreference.com
< c‎ | io
 
 
文件输入/输出
类型和对象
函数
文件访问
直接输入/输出
无格式输入/输出
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)
格式化输入
(C99)(C99)(C99)(C11)(C11)(C11)     
 
定义在头文件 <stdio.h>
int fsetpos( FILE *stream, const fpos_t *pos );

根据 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

[编辑] 参考资料

  • C11 标准 (ISO/IEC 9899:2011)
  • 7.21.9.3 The fsetpos function (p: 337)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.19.9.3 The fsetpos function (p: 303)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.9.9.3 The fsetpos function

[编辑] 参见

获取文件位置指示器
(函数) [编辑]
返回当前文件位置指示器
(函数) [编辑]
将文件位置指示器移动到文件中的特定位置
(函数) [编辑]
C++ 文档 针对 fsetpos