清华大学出版社 TSINGHUA UNIVERSITY PRESS 也就是说,在输出时不会自动增加回车换行符以作 为记录结束的标志,输入时不以回车换行符作为记 录的间隔(事实上C文件并不由记录构成)。我们把 这种文件称为流式文件。C语言允许对文件存取一 个字符,这就增加了处理的灵活性。 在过去使用的C版本(如UNX系统下使用的C)有两 种对文件的处理方法:一种叫“缓冲文件系统”, 一种叫“非缓冲文件系统”。所谓缓冲文件系统是 指系统自动地在内存区为每一个正在使用的文件名 开辟一个缓冲区。从内存向磁盘输出数据必须先送 到内存中的缓冲区,装满缓冲区后才一起送到磁盘 去。如果从磁盘向内存读入数据,则一次从磁盘文 件将一批数据输入到内存缓冲区(充满缓冲区),然 后再
• 也就是说,在输出时不会自动增加回车换行符以作 为记录结束的标志,输入时不以回车换行符作为记 录的间隔(事实上C文件并不由记录构成)。我们把 这种文件称为流式文件。C语言允许对文件存取一 个字符,这就增加了处理的灵活性。 • 在过去使用的C版本(如UNIX系统下使用的C)有两 种对文件的处理方法:一种叫“缓冲文件系统”, 一种叫“非缓冲文件系统”。所谓缓冲文件系统是 指系统自动地在内存区为每一个正在使用的文件名 开辟一个缓冲区。从内存向磁盘输出数据必须先送 到内存中的缓冲区,装满缓冲区后才一起送到磁盘 去。如果从磁盘向内存读入数据,则一次从磁盘文 件将一批数据输入到内存缓冲区(充满缓冲区),然 后再
清华大学出版社 TSINGHUA UNIVERSITY PRESS 从缓冲区逐个地将数据送到程序数据区(给程序变 量)。见图13.2。缓冲区的大小由各个具体的C版 本确定,一般为512字节。 输出文件缓冲区 磁盘 程序数据区 输出 输出 输入文件缓冲区 输入 输入 图13.2
图13.2 从缓冲区逐个地将数据送到程序数据区(给程序变 量)。见图13.2。缓冲区的大小由各个具体的C版 本确定,一般为512字节
清华大学出版社 TSINGHUA UNIVERSITY PRESS 所谓“非缓冲文件系统”是指系统不自动开辟确 定大小的缓冲区,而由程序为每个文件设定缓冲 区。 。 在UNX系统下,用缓冲文件系统来处理文本文件, 用非缓冲文件系统处理二进制文件。用缓冲文件 系统进行的输入输出又称为高级(或高层)磁盘输入 输出(高层/O),用非缓冲文件系统进行的输入输 出又称为低级(低层)输入输出系统。ANSI C标准 决定不采用非缓冲文件系统,而只采用缓冲文件 系统。即既用缓冲文件系统处理文本文件,也用 它来处理二进制文件。也就是将缓冲文件系统扩 充为可以处理二进制文件。 在C语言中,没有输入输出语句,对文件的读写 都是且库函数来实现的。AS规定了标准输入输
• 所谓“非缓冲文件系统”是指系统不自动开辟确 定大小的缓冲区,而由程序为每个文件设定缓冲 区。 • 在UNIX系统下,用缓冲文件系统来处理文本文件, 用非缓冲文件系统处理二进制文件。用缓冲文件 系统进行的输入输出又称为高级(或高层)磁盘输入 输出(高层I/O),用非缓冲文件系统进行的输入输 出又称为低级(低层)输入输出系统。ANSI C标准 决定不采用非缓冲文件系统,而只采用缓冲文件 系统。即既用缓冲文件系统处理文本文件,也用 它来处理二进制文件。也就是将缓冲文件系统扩 充为可以处理二进制文件。 • 在C语言中,没有输入输出语句,对文件的读写 都是用库函数来实现的。ANSI规定了标准输入输
清华大学出版社 TSINGHUA UNIVERSITY PRESS 出函数,用它们对文件进行读写。 ·本章只介绍ANSI C规定的文件系统以及对它的读 写。 13.2文件类型指针 缓冲文件系统中,关键的概念是“文件指针” 每个被使用的文件都在内存中开辟一个区,用来 存放文件的有关信息(如文件的名字、文件状态及 文件当前位置等)。这些信息是保存在一个结构体 变量中的。该结构体类型是由系统定义的,取名 为FLE。Turbo C在stdio.,h文件中有以下的文件 类型声明:
出函数,用它们对文件进行读写。 • 本章只介绍ANSI C规定的文件系统以及对它的读 写。 13.2 文件类型指针 • 缓冲文件系统中,关键的概念是“文件指针”。 每个被使用的文件都在内存中开辟一个区,用来 存放文件的有关信息(如文件的名字、文件状态及 文件当前位置等)。这些信息是保存在一个结构体 变量中的。该结构体类型是由系统定义的,取名 为FILE。Turbo C在stdio.h文件中有以下的文件 类型声明:
清华大学出版社 TSINGHUA UNIVERSITY PRESS typedef struct {shortlevel;/*缓冲区“满”或“空”的程度*/ unsignedflags; /文件状态标志*/ charfd; /*文件描述符*/ unsignedcharhold;/*如无缓冲区不读取字符*/ shortbsize; /*缓冲区的大小*/ unsignedchar*?baffer;:/*数据缓冲区的位置*/ unsignedar*curp;/*指针,当前的指向*/ unsignedistemp;/*临时文件,指示器*/ shorttoken;/*用于有效性检查*/ FILE;
typedef struct {shortlevel; /*缓冲区“满”或“空”的程度*/ unsignedflags; /*文件状态标志*/ charfd; /*文件描述符*/ unsignedcharhold; /*如无缓冲区不读取字符*/ shortbsize; /*缓冲区的大小*/ unsignedchar*baffer;/*数据缓冲区的位置*/ unsignedar*curp;/*指针,当前的指向*/ unsignedistemp;/*临时文件,指示器*/ shorttoken;/*用于有效性检查*/ }FILE;