c语言 - fgets() 如何跟踪它在哪一行?



此代码逐行正确读取文件,将每一行存储在 line[] 中并打印出来。

int beargit_add(const char* filename) {
    FILE* findex = fopen(".beargit/.index", "r");
    char line[FILENAME_SIZE];
    while(fgets(line, sizeof(line), findex)) {
        strtok(line, "n");
        fprintf(stdout, "%sn", line);
    }
    fclose(findex);
    return 0;
}

但是,我很困惑为什么在while循环中使用fgets()实际上可以逐行读取文件。在学习了Python和Java之后,我对C语言是全新的。

由于每次调用 fgets() 都是独立的,因此每次调用它时,C 在哪里记住它当前在哪一行?我认为这可能与更改FILE* index指向的值有关,但是您将指针按值传递到fgets(),因此无法对其进行修改。

任何有助于理解C的魔力的帮助,非常感谢!

这不是跟踪,findex为你做这件事

findex是一种FILE类型,其中包括有关打开文件的信息,例如文件描述符、文件偏移量

FILE是操作系统中 I/O 的封装。

更多关于: 文件

标识流并包含控制流所需的信息的对象类型,包括指向其缓冲区、其位置指示器及其所有状态指示器的指针。

偏移量是为了跟踪文件,每次读取文件时,它都会从偏移量开始。所有这些工作都是由FILE完成的,它为你做,也为fgets

有关偏移偏移维基的更多信息

我认为这可能与将FILE* index点的值更改为

更改的不是指针本身的值。指针指向一个结构(类型 FILE ),该结构包含有关与该结构/指针关联的流的信息。据推测,该结构的一个成员包含一个"游标",该游标指向要读取的下一个字节。

或者也许它只是有一个文件描述符int(就像许多 Unices 一样),I/O 函数只是调用内核以获取有关文件描述符的信息,包括当前位置。

相关内容

  • 没有找到相关文章

最新更新