C fgets()如何跟踪它的哪条线';什么事?

C fgets()如何跟踪它的哪条线';什么事?,c,file,stream,C,File,Stream,此代码逐行正确读取文件,将每一行存储在第[]行并打印它 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, "%

此代码逐行正确读取文件,将每一行存储在第[]行并打印它

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, "%s\n", line);
    }
    fclose(findex);
    return 0;
}
但是,我不明白为什么在while循环中使用fgets()会逐行读取文件。在学习了Python和Java之后,我对C是全新的

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


非常感谢您对理解C语言的魔力所给予的任何帮助

这不是fgets跟踪,
findex
为您做这件事

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

文件
是操作系统中I/O的封装

更多关于:

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

偏移量是用来跟踪文件的,每次读取文件时,它都从偏移量开始。所有这些工作都是由
文件
完成的,它为您和
fgets

有关偏移量的详细信息

我认为这可能与将值
FILE*index
指向

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


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

如果我没有弄错的话,它是在内部处理的。我愿意学习这个内部魔法!