📜  C中的fseek()(1)

📅  最后修改于: 2023-12-03 15:14:24.977000             🧑  作者: Mango

C中的fseek()

介绍

在C语言中,我们可以使用fseek()函数来移动文件指针的位置,这个函数通常会和文件的读写操作一起使用。fseek()能够将文件指针移动到指定的位置,这样我们就可以从文件的任意位置开始读取或写入数据。

函数原型
int fseek(FILE *stream, long int offset, int origin);

其中,stream 表示文件指针,offset 表示指针偏移量,origin 表示指向偏移量的方向。

偏移量的取值

偏移量 offset 的取值可以是正数也可以是负数,表示相对于origin的偏移量。偏移量的单位是字节(byte),可为long int类型。origin 可以取以下三个值之一:

  • SEEK_SET: 从文件开头开始偏移,offset的值为相对于文件开头的偏移量。
  • SEEK_CUR: 从当前位置开始偏移,offset的值为相对于当前位置的偏移量。
  • SEEK_END: 从文件末尾开始偏移,offset的值为相对于文件末尾的偏移量。
返回值

该函数返回值为成功(0)或失败(非0)。

代码示例
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    long int offset;

    fp = fopen("test.txt", "r");
    if(fp == NULL)
    {
        printf("无法打开文件\n");
        exit(1);
    }

    // 将文件指针从开头移动到第10个字节的位置
    offset = fseek(fp, 10L, SEEK_SET);
    if(offset != 0)
    {
        printf("移动文件指针出错\n");
        exit(1);
    }

    // 从第10个字节的位置开始读取文件内容
    char c = fgetc(fp);
    while(c != EOF)
    {
        printf("%c", c);
        c = fgetc(fp);
    }

    fclose(fp);
    return 0;
}

上述代码中,我们打开了一个名为test.txt的文件,并将文件指针移动到了第10个字节的位置。然后我们使用fgetc()函数来读取该位置后的文件内容。

注意事项
  • 当函数返回值为非0时,意味着指针无法移动到指定位置,我们应该根据返回值来判断是否发生了错误。
  • 使用fseek()函数来移动指针的位置时,需要注意文件的打开方式,只有以“r+”或“w+”方式打开的文件才能进行读写操作。