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