关于C文件而言,笔者最早是接触在Linux 下的C开发,Linux的文件系统比较复杂,而Linux是一个“文件系统”的系统,怎么说呢?就在是Linux系统中都是文件,所有的都可以把它当做文件来处理。
C文件概述
1:操作系统是如何处理的?
其实所谓的“文件”一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质(比如磁盘)上的。
操作系统是以文件为单位对数据进行管理。也就是说如果想找到外部介质上的数据,必须先按文件名找到所指定的文件,然后从文件中读取数据。而要想往外部介质上存储数据也必须先建立一个文件,才能向他输出数据。
2:文件的数据组织形式
C语言中把文件看做一个字符(字节)序列,即由一个一个字符(字节)的数据顺序。
按组织顺序分为ASCII文件和二进制文件。
ASCII文件:又称之为文本文件,它的每个字节放一个ASCII码,代表一个字符
二进制文件:二进制文件把内存中的数据按其在内存中的存储样式原样输出到磁盘上存放。
(补充:关于ASCII码中关于数字和字母的记忆:大写字母:65~90,小写字母:97~122,数字:80~89)
3:文件的输入输出
一个C文件是一个字节流或者二进制流,它把数据看做是一连串的字符(字节),而不考虑记录的界限
换句话说:C语言中文件并不是由记录组成,在C语言中对文件的存取是以字符为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号控制。也就是说,在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔。把这种文件称之为流式文件。
4:文件处理方法
在过去使用的C版本有两种对文件的处理方法:
"缓冲文件系统":系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存中读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区。
"非缓冲文件系统":指系统不自动确定大小的缓冲区,而由程序为每个文件设定缓冲区。
在UNIX系统下,用缓冲文件系统处理文本文件,用非缓冲文件系统处理二进制文件
在C语言中,没有输入输出语句,对文件的读写都是通过库函数来实现的。ANSI规定了标准输入输出函数,用它们来对文件进行读写。
文件指针
每个被使用的文件都在内存中开辟了一个区,用来存放文件的有关信息(如文件名字、文件状态以及文件当前位置等)这些信息是保存在一个结构体变量中的。
该结构体类型由系统定义,取名为FILE。
文件类型声明:
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
}FILE;
可以定义文件型指针变量:
FILE *fp;
可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。
也可以定义FILE类型的数组
FILE f[5];定义一个结构体数组,他有5个元素,可以用来存放5个文件的信息