fsetpos

来自cppreference.com
< c‎ | io
 
 
 
定义于头文件 <stdio.h>
int fsetpos( FILE *stream, const fpos_t *pos );

根据pos所指向的值,设置文件流stream的文件位置指示器和多字节分析状态(若存在)。

在设立新的分析状态和位置外,对此函数的调用撤销ungetc的效果并清除文件尾状态,若它被设置。

若发生读或写错误,则设置stream的错误指示器(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\n", B[0]);   /* 打印一个浮点值 */
 
    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\n", B[0]);                    /* 打印一个浮点值 */
    fclose(fp);
 
    return EXIT_SUCCESS; 
}

输出:

1.0
1.0

[编辑] 参考

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

[编辑] 参阅

获取文件位置指示器
(函数) [编辑]
返回当前的文件位置指示值
(函数) [编辑]
将文件位置指示符移动到文件中的指定位置
(函数) [编辑]
fsetposC++文档