C 库 - fseek() 函数



C 库的 fseek(FILE *stream, long int offset, int whence) 函数将流的文件位置设置为给定的偏移量。此函数是 C 标准库的一部分,用于文件处理。

语法

以下是 C 库 fseek() 函数的语法:

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

参数

此函数接受三个参数:

  • FILE *stream: 指向 FILE 对象的指针,用于标识流。
  • long int offset: 要移动文件指针的字节数。
  • int whence: 添加偏移量的起始位置。它可以具有以下值之一
    • SEEK_SET: 文件开头。
    • SEEK_CUR: 文件指针的当前位置。
    • SEEK_END: 文件结尾。

    返回值

    函数在成功时返回 0,失败时返回非零值。该函数还会设置 errno 以指示错误。


    示例 1:移动到文件开头

    此程序打开一个文件,并在读取第一个字符之前将文件指针移动到文件开头。

    以下是 C 库 fseek() 函数的示例。


    #include <stdio.h>
    
    int main() {
       FILE *file = fopen("example1.txt", "r");
       if (file == NULL) {
           perror("Error opening file");
           return 1;
       }
    
       fseek(file, 0, SEEK_SET);
    
       char ch = fgetc(file);
       if (ch != EOF) {
           printf("First character in the file: %c\n", ch);
       }
    
       fclose(file);
       return 0;
    }
    

    输出

    以上代码产生以下结果:

    First character in the file: [First character of the file]
    

    示例 2:从当前位置向后移动

    在此示例中,我们将文件指针移动到从开头算起的第 10 个字节,然后将其向后移动 3 个字节,导致文件指针位于第 7 个字节,从中读取字符。


    #include <stdio.h>
    
    int main() {
       FILE *file = fopen("example3.txt", "r");
       if (file == NULL) {
           perror("Error opening file");
           return 1;
       }
    
       fseek(file, 10, SEEK_SET);  // Move to the 10th byte from the beginning
       fseek(file, -3, SEEK_CUR);  // Move 3 bytes backward from the current position
    
       char ch = fgetc(file);
       if (ch != EOF) {
           printf("Character after moving backward: %c\n", ch);
       }
    
       fclose(file);
       return 0;
    }
    

    输出

    执行以上代码后,我们将获得以下结果:

    Character after moving backward: [Character at position 7]
    
    广告