gpt4 book ai didi

c - 文件指针或流指针背后的概念是什么?

转载 作者:行者123 更新时间:2023-11-30 18:57:27 25 4
gpt4 key购买 nike

我知道指针是一个存储另一个变量地址的变量。所以我理解了字符类型指针、整数类型指针的概念,当我们向指针加一时会发生什么等等。但我没有得到文件指针背后的真正概念。为什么我们不能像字符数据类型那样直接指向它们?例如,考虑一个包含内容的文件:

Hello World
fantastic

让“ptr”指向该文件。为什么我们不能使用 ptr 技术来指向 'H',(ptr+1) 指向 'e',(ptr+2) 指向 'l' 等等。如果我的问题很愚蠢,请原谅,如果我理解真正的概念,有时就会变得清楚。我认为这个文件实际上存储在内存中,就像字符串存储在内存中一样。(我知道 fscanf() 函数和所有)

最佳答案

有一个东西叫做 memory mapped file ,但除此之外,您只需打开文件并将其加载到缓冲区中即可实现您想要的(如果我理解正确的话)(这是从文件中读取数据的常见方法)。

进入内存后,您可以使用 *buf 访问第一个字节,使用 *(buf+1) 访问第二个字节,依此类推;或者,使用 buf[0]buf[1] 等通常会更好,因为更清晰。

如果不使用内存映射文件为什么不能呢?由于当您在 C 中打开文件(使用 fopen)时,您拥有的是一个不透明指针(即指向您未知数据的指针,因此您必须将其视为“概念”而不是实际数据)您可以阅读)允许其他函数(fread、fwrite、fseek 等)对您打开的文件进行“操作”,但该指针不“包含”文件的字节。有时它被称为处理程序是有原因的:它使得“处理”文件成为可能。

使用不透明指针FILE*,您可以从内存中的该文件读取字节,然后可以处理内存中的数据。

关于c - 文件指针或流指针背后的概念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20935404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com