【发布时间】:2020-08-16 22:00:11
【问题描述】:
我刚开始学习指针和打开文件。那么,当我使用FILE 数据类型打开现有文件进行读取时,指针指向文件内存位置还是变量内存位置?
#include <stdio.h> // I/O
int main(int argc, char const *argv[])
{
FILE *fpointer = fopen("employees", "r");
fclose(fpointer);
return 0;
}
如果指针指向文件的内存位置,当我打印指针时,输出的将是内存中的确切文件位置?
printf("memory address: %p\n", fpointer);
// i.e 0x55a5ca11a2a0
【问题讨论】:
-
文件不在您的进程内存中。它位于某些存储设备(例如磁盘)上。文件指针指向一个包含缓冲信息的结构。读取文件时,它以存储在缓冲区中的块的形式读取。当需要更多时,会进行 I/O 调用以读取更多文件。
-
@TomKarzes
The file isn't in your process memory是的,我知道。但我认为该变量保存文件位置,因为为了打开它,他需要它的位置。很高兴知道! -
FILE 是一个用于描述的结构。该结构包含操作系统需要了解的有关该文件的所有信息。比如磁盘上的物理位置、当前文件指针(通常是文件的当前(在 linux 中)
inode、输入和输出缓冲区等。调用fopen()返回一个指向该结构实例的指针。那些结构实例保存在一个数组中,调用open()会返回该数组的索引。