fseek函数、ftell函数和fflush函数

1.fseek函数

int fseek(FILE * _File, long _Offset, int _Origin);

  • 第一个参数stream为文件指针
  • 第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
  • 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾

fseek(fp, 3, SEEK_SET);
fseek(fp,-4,SEEK_END);//为负数,倒着走!

int main()//写文件
{

    char a[10] = {1,2,3,4,5,6,7,8,9,10};
    FILE *P = fopen("D:\\temp\\a2.dat","wb");
    fwrite(a,1,sizeof(a),p);


    fclose(p);
    return 0;    

}


int main()//读这个文件1
{

    char a[2];
    FILE *p = fopen("D:\\temp\\a2.dat","rb");
    fread(a,1,sizeof(a),p);//所有的c语言文件读写库都会自动维护fopen返回的指针
    printf("%d  %d\n",a[0],a[1]);//读出1 2
    fread(a,1,sizeof(a),p);
    printf("%d  %d\n",a[0],a[1]);//读出3 4

}

===========================================
int main()//读这个文件2
{

    char a[2];
    FILE *p = fopen("D:\\temp\\a2.dat","rb");
    fseek(p,2,SEEK_SET);//从文件开始往后位移两个字节
    fread(a,1,sizeof(a),p);
    printf("%d  %d\n",a[0],a[1]);//读出3 4
    fread(a,1,sizeof(a),p);
    printf("%d  %d\n",a[0],a[1]);//读出5 6

}

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败则不改变stream指向的位置,函数返回一个非0值。

2.ftell函数

函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。

long len = ftell(fp)

实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,还是返回0,请小心使用。

3.fflush函数

文件缓冲区说明.png

fflush函数

fflush函数可以将缓冲区中任何未写入的数据写入文件中。不加的话都在内容都保存在了缓冲区,只有在调用fclose()函数的时候才写进去!

成功返回0,失败返回EOF。

int fflush(FILE * _File);

由于fflush是实时 的将缓冲区的内容写入磁盘,所以不要大量去使用,但如果是特别敏感的数据,可以通过fflush写入磁盘,防止由于电脑各种故障,内存的数据丢失。

你可能感兴趣的:(fseek函数、ftell函数和fflush函数)