C中的FILE指针如何工作?

Old*_*ool 3 c file

如果我们写:

//in main

FILE *p = fopen("filename", "anymode");
Run Code Online (Sandbox Code Playgroud)

我的问题是:p指向什么?

Jon*_*ler 8

文件指针p指向由C库处理的结构,该库在给定的打开模式下管理指定文件的I/O功能.

你不能先验地说明它所指的是静态分配的内存还是动态分配的内存; 你不需要知道.您将其视为不透明指针.

请注意,标准说:

ISO/IEC 9899:2011 7.21.3文件

FILE用于控制流的对象的地址可能很重要; FILE对象的副本不需要代替原件.

这说(粗略地):不要指针; 将它传递给需要它的函数,否则就可以独自完成.

  • 除此之外,是的,它指向的结构包含指向文件缓冲区的指针.在Unix上,它记录了文件流的基础文件描述符(可能是Windows上的某种文件句柄).它包含有关文件和缓冲区中当前位置的信息; 它包含有关推回字符的信息; 它包含库正确处理I/O所需的所有信息. (2认同)
  • 你的问题有点令人困惑.有一种结构类型`FILE`.你从`fopen()`得到的是一个`FILE*`,它指向一个`FILE`结构.指向的结构包含库管理文件I/O所需的所有信息.一个结果是它很少包含文件名; 文件打开后不需要.`FILE`结构不是缓冲区; 缓冲区是一个字符数组.`FILE`结构包含一个指向缓冲区的指针,由系统提供或由用户通过`setvbuf()`或`setbuf()`提供._[...继续...]_ (2认同)
  • _ [... continuation ...] _该结构不仅包含指向缓冲区的指针.我不确定Windows的详细信息,但该结构包含O/S级别所需的任何信息,以便以符合C标准的方式管理文件.短语'间接指向通过缓冲区打开的文件'是错误的; 缓冲区是一个字符数组,其中数据被保存,直到它被读取或写入磁盘,因此系统不进行单字符I/O操作(通常;即使是无缓冲的`FILE*`也避免了单字符操作时它可以). (2认同)