我了解fread()具有以下功能定义:

size_t fread(void *buffer, size_t size, size_t qty, FILE *inptr);


我也理解inptr是使用fopen()函数打开FILE指针时返回的文件指针。我的问题是inptr是否在文件的内存中存储文件的每个单个字符/字母的内存地址?如果是这种情况,是否将inptr中的内存地址复制到*buffer(指向缓冲区数组的指针)?

我还有另一件事感到困惑。每次调用fread()时,都会复制/传输size * qty个字节的内存。是inptr本身指向的文件内容,还是正在复制/传输的文件内容的内存地址?

如果有人可以帮助我清除混乱,将不胜感激。谢谢 :)

最佳答案

FILE由您的操作系统实现。 FILE上运行的功能由您的系统实现。你不知道要知道,您需要浏览操作系统的源代码。
inptr可能是操作系统分配的内存的指针。也可能是您的操作系统用来查找其数据的数字。无论如何,这是系统用来查找FILE特定数据的句柄。然后您的系统决定该数据中包含什么。出于缓存目的,也许所有字母都缓存在某个缓冲区中。也许不吧。
fread呼叫。 Freadinptr句柄后面的基础实体读取数据。 inptr由系统解释,以访问基础内存或结构或设备或硬盘驱动器或打印机或键盘或鼠标或其他任何内容。它读取qty*size个字节的数据。这些数据放在buffer中。没有指针放置在那里。从设备读取的字节被放置在buffer指向的存储器中。

关于c - C语言中的fread实际上如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50312089/

10-13 04:53