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函数只是调用内核来获取关于文件描述符的信息,包括当前位置。如果我没有弄错的话,它是在内部处理的。我愿意学习这个内部魔法!