1、文件和流的关系
C将每个文件简单地作为顺序字节流(如下图)。每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中。当打开文件时,就建立了和文件的关系。
在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流、标准输出流和标准错误。流提供了文件和程序的通信通道。例如,标准输入流使得程序可以从键盘读取数据,而标准输出流使得程序可以在屏幕上输出数据。打开一个文件将返回指向FILE结构(在stdio.h中定义)的指针,它包含用于处理文件的信息,也就是说,这个结构包含文件描述符。文件描述符是操作系统数组(打开文件列表的索引)。每个数组元素包含一个文件控制块(FCB, File Control Block),操作系统用它来管理特定的文件。
FILE结构体
C语言的stdio.h头文件中,定义了用于文件操作的结构体FILE。这样,我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作。可以在stdio.h(位于visual studio安装目录下的include文件夹下)头文件中查看FILE结构体的定义,如下:
- <strong>TC2.0</strong>中:
- typedef struct {
- short level; / fill/empty level of buffer /
- unsigned flags; / File status flags /
- char fd; / File descriptor /
- unsigned char hold; / Ungetc char if no buffer /
- short bsize; / Buffer size /
- unsigned char buffer; / Data transfer buffer /
- unsigned char *curp; / Current active pointer /
- unsigned istemp; / Temporary file indicator /
- short token; / Used for validity checking /
- } FILE; / This is the FILE object */
- <strong>VC6.0中</strong>:
- #ifndef _FILE_DEFINED
- struct _iobuf {
- char *_ptr; //文件输入的下一个位置
- int _cnt; //当前缓冲区的相对位置
- char *_base; //指基础位置(即是文件的其始位置)
- int _flag; //文件标志
- int _file; //文件的有效性验证
- int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
- int _bufsiz; //???这个什么意思
- char *_tmpfname; //临时文件名
- };
- typedef struct _iobuf FILE;
- #define _FILE_DEFINED
- #endif
<strong>TC2.0</strong>中:
typedef struct {
short level; /* fill/empty level of buffer */
unsigned flags; /* File status flags */
char fd; /* File descriptor */
unsigned char hold; /* Ungetc char if no buffer */
short bsize; /* Buffer size */
unsigned char *buffer; /* Data transfer buffer */
unsigned char *curp; /* Current active pointer */
unsigned istemp; /* Temporary file indicator */
short token; /* Used for validity checking */
} FILE; /* This is the FILE object */
<strong>VC6.0中</strong>:
#ifndef _FILE_DEFINED
struct _iobuf {
char *_ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char *_base; //指基础位置(即是文件的其始位置)
int _flag; //文件标志
int _file; //文件的有效性验证
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //???这个什么意思
char *_tmpfname; //临时文件名
};
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif
FILE结构包含操作系统用来访问文件的低级文件描述符、文件缓存区的大小和位置、unget使用的字符缓存区,表示文件是否为临时文件的标志以及其他一些标志变量。此外,FILE指针还存储了文件指针,可以对文件中的当前位置进行跟踪记录。
系统为每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(例如文件名、文件位置等)。这些信息保存在结构类型变量中,该结构类型由系统定义,取名为FILE。(注意“FILE必须大写”)
参考:
http://yaotiaochimei.blog.51cto.com/4911337/841497
http://yaotiaochimei.blog.51cto.com/4911337/841497
http://www.cnblogs.com/haore147/p/3648395.html
转载自:https://blog.csdn.net/my_heart_/article/details/52334858