非常教程

C参考手册

文件输入/输出 | File input/output

fseek

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

int fseek(FILE * stream,long offset,int origin);

将文件流的文件位置指示符设置为stream指向的值offset

如果stream以二进制模式打开,则新位置是offset从文件开始处测量的字节(如果origin是)SEEK_SET,从当前文件位置(如果origin是)SEEK_CUR,以及从文件结尾(如果origin是)开始SEEK_END。二进制流不需要支持SEEK_END,特别是如果输出额外的空字节。

如果stream是在文本模式下打开,对于仅支持值offset为零(这与任何工作origin),并通过先前调用返回的值ftell与同一文件(仅与工作相关的物流originSEEK_SET)。

如果stream是面向广域的,则应用文本流和二进制流的限制(ftellSEEK_SET允许使用结果,SEEK_SET和SEEK_CUR允许使用零偏移量,但不允许SEEK_END)。

除了更改文件位置指示符之外,还可以fseek取消ungetc文件结束状态的效果并清除文件结束状态(如果适用)。

如果发生读取或写入错误,则会ferror设置stream()的错误指示符并且文件位置不受影响。

参数

-

文件流进行修改

抵消

-

将位置相对于原点移动的字符数

起源

-

添加了偏移量的位置。它可以具有以下值之一:SEEK_SET,SEEK_CUR,SEEK_END

返回值

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

注意

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

对于文本流,唯一有效的值offset​0​(适用于任何origin)和先前调用返回的值ftell(仅适用于SEEK_SET)。

POSIX允许在现有的文件结尾之外寻找。如果在此查找后执行输出,则从间隙读取的数据将返回零字节。在文件系统支持的地方,这将创建一个稀疏文件

fflush如果有任何未写入的数据(但是移位状态是否恢复为实现定义),POSIX还要求fseek首先执行。

带有错误检查的fseek。

#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");
 
    /* Set the file position indicator in front of third f-p value. */
    if (fseek(fp,sizeof(double)*2L,SEEK_SET) != 0)
    {
       if (ferror(fp))
       {
          perror("fseek()");
          fprintf(stderr,"fseek() failed in file %s at line # %d\n", __FILE__,__LINE__-5);
          exit(EXIT_FAILURE);
       }
    }
 
    int ret_code = fread(B,sizeof(double),1,fp);   /* read one f-p value  */
    printf("%.1f\n", B[0]);                        /* print one f-p value */
 
    fclose(fp);
    return EXIT_SUCCESS;
}

输出:

3.0

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.21.9.2 fseek函数(p:336-337)
  • C99标准(ISO / IEC 9899:1999):
    • 7.19.9.2 fseek函数(p:302-303)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.9.9.2 fseek函数
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。