typedef struct {
short level /* fill/empty level of buffer */
unsignedflags /* File status flags*/
charfd /* 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 */
unsignedistemp /* Temporary file indicator */
short token /* Used for validity checking */
} FILE /* This is the FILE object */
在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种 *** 作成为“输入”或“读”;当调用输出函数把程序中变量的值输出到外部文件中时,这种 *** 作称为“输出”或“写”。文件指针实际上是指向一个结构体类型的指针,这个结构体中包含有诸如:缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标志等信息。
c语言文件类型指针是通过FILE *fp这种形式进行定义的。
关于FILE结构在VC6中有如下定义:
#ifndef _FILE_DEFINEDstruct _iobuf {
char *_ptr //文件输入的下一个位置
int _cnt //当前缓冲区的相对位置
char *_base //指基础位置(即是文件的起始位置)
int _flag //文件标志
int _file //文件描述符id
int _charbuf //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz //文件缓冲区大小
char *_tmpfname //临时文件名
}
typedef struct _iobuf FILE
#define _FILE_DEFINED
#endif
C程序用不同的FILE结构管理每个文件。程序员可以使用文件,但是不需要知道FILE结构的细节。实际上,FILE结构是间接地 *** 作系统的文件控制块(FCB)来实现对文件的 *** 作的,如下图:
上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。
文件是存放在物理磁盘上的,包括文件控制块(FCB)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。
相关函数:
FILE *fopen( char *file, char *open_mode )//打开文件,读文件到内存,返回文件信息结构指针
int fread( char s, int size, int num, FILE *fp )//按字节读取文件内容到s中
int fwrite( char s, int size, int num, FILE *fp )//按字节将s地址中的数据写到文件中
char *fgets( char *s, int max_size, FILE *fp)//读一行数据到缓冲区s中
int fseek( FILE *fp, long offset, int whence)//移动文件指针到指定位置
void rewind(FILE *fp)//回到文件头
long ftell(FILE *fp)//得到当前文件偏移位置
fclose(fp)//关闭文件,刷新缓存到物理磁盘上
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)