C 文件结构在哪里分配?

C 文件结构在哪里分配?,c,file-io,C,File Io,在C语言中,当使用 FILE *fin; fin=fopen("file.bin","rb"); 我只有一个指向文件结构的指针。Windows计算机上实际分配的文件结构在哪里?它是否包含访问该文件所需的所有信息 我的目标是将整个数据段转储到磁盘,然后将转储的文件重新加载到数据段的开头。重新加载转储文件的代码放在单独的函数中。这样,fin指针是本地指针,位于堆栈上,因此在重新加载时不会被覆盖。但是文件结构本身不是本地的。我注意不要覆盖从地址fin开始的大小为sizeof(FILE)的内存区域

在C语言中,当使用

FILE *fin; 
fin=fopen("file.bin","rb"); 
我只有一个指向文件结构的指针。Windows计算机上实际分配的文件结构在哪里?它是否包含访问该文件所需的所有信息

我的目标是将整个数据段转储到磁盘,然后将转储的文件重新加载到数据段的开头。重新加载转储文件的代码放在单独的函数中。这样,
fin
指针是本地指针,位于堆栈上,因此在重新加载时不会被覆盖。但是
文件
结构本身不是本地的。我注意不要覆盖从地址
fin
开始的大小为
sizeof(FILE)
的内存区域

操作成功完成,但我在上得到一个断言失败

fclose(fin)

是否覆盖文件结构中以外的其他一些必要文件数据?

文件在stdio.h中定义。它包含了关于该文件的所有信息,但是,看看您显示的代码,我认为您不理解它的用途。它是用C库在操作系统中创建和运行的,C库用文件信息填充文件,但文件本身不包含它。

文件在stdio.h中定义。它包含了关于该文件的所有信息,但是,看看您显示的代码,我认为您不理解它的用途。它是使用C库在操作系统中创建和运行的,C库用文件信息填充文件,但不包含在文件本身中。

标准库中存在
文件结构的实际实例。通常,标准库会分配一定数量的文件结构,这些文件结构可能是固定数量的,也可能不是固定数量的。调用
fopen()
时,它将返回指向这些结构之一的指针

文件
结构中的数据可能包含指向其他对象(如缓冲区)的指针。如果不与标准库实现进行真正深入的集成,就不可能将这些结构保存并恢复到磁盘


您可能会对在不同级别上处理保存和恢复之类的内容感兴趣。

标准库中存在
文件
结构的实际实例。通常,标准库会分配一定数量的文件结构,这些文件结构可能是固定数量的,也可能不是固定数量的。调用
fopen()
时,它将返回指向这些结构之一的指针

文件
结构中的数据可能包含指向其他对象(如缓冲区)的指针。如果不与标准库实现进行真正深入的集成,就不可能将这些结构保存并恢复到磁盘


您可能会对进程在不同级别上进行保存和恢复之类的操作感兴趣。

您似乎在尝试做一些危险的、不太可能工作的事情。

fopen
分配一个
文件
结构并对其进行初始化
fclose
将其释放。它如何分配它以及在其中放入什么取决于实现。它可能包含一个指向另一块内存的指针,该内存也被分配到某个地方(因为它是缓冲I/O,我想它确实在某个地方分配了缓冲区)。


编写依赖于
fopen
内部的代码是危险的,很可能不起作用,而且肯定不会稳定和可移植。

您似乎在尝试做一些危险的事情,不太可能起作用。

fopen
分配一个
文件
结构并对其进行初始化
fclose
将其释放。它如何分配它以及在其中放入什么取决于实现。它可能包含一个指向另一块内存的指针,该内存也被分配到某个地方(因为它是缓冲I/O,我想它确实在某个地方分配了缓冲区)。


编写依赖于
fopen
内部的代码是危险的,很可能无法工作,而且肯定不会稳定和可移植。

好吧,你有一个指向
文件
对象的指针,所以从技术上讲你知道它在哪里,但你应该知道
文件
是故意不透明的类型。您不需要知道它包含什么,只需要知道您可以将它传递给了解它的函数以执行某些操作。此外,
FILE
可能不是完整的类型,因此
sizeof(FILE)
可能不正确,此外,对象可能包含指向其他结构的指针。仅仅避免覆盖
文件
对象不足以避免通过写入其大部分内存而损坏程序。

好吧,您有一个指向
文件
对象的指针,因此从技术上讲,您知道它在哪里,但您应该知道
文件
是故意使用的不透明类型。您不需要知道它包含什么,只需要知道您可以将它传递给了解它的函数以执行某些操作。此外,
FILE
可能不是完整的类型,因此
sizeof(FILE)
可能不正确,此外,对象可能包含指向其他结构的指针。仅仅避免覆盖
文件
对象不足以避免通过写入程序的大部分内存来破坏程序。

我的意思是,文件结构在哪里分配,而不是定义。我的意思是,我只得到指向它的指针。它是如何声明的,比如malloc'ed还是什么?当您执行fopen时,会创建并返回一个文件结构。我确信空间是使用malloc或类似的方法创建的。我的意思是文件结构在哪里分配的,而不是定义的。我的意思是,我只得到指向它的指针。它是如何声明的,比如malloc'ed还是什么?当您执行fopen时,会创建并返回一个文件结构。我确信这个空间是用malloc或类似的工具创建的。你到底想做什么
fclose(fin)