首先我们了解一下什么是I/O?
I :就是input的首字母,表示的就是输入;一般标准的输入就是数据从键盘拷贝到内存。
O:就是output的首字母,表示的就是输出;一般标准的输出就是数据从从内存拷贝到显示器。
笼统的输入和输出:
输入:数据从文件拷贝到内存--》读文件
输出:输出从内存拷贝到文件--》写文件
注意:I/O就是对文件的操作
在这我们了解一下文件的种类,到目前为止,我们了解的基本都是一些文本文件。接下来我们了解一下其他文件:
- :普通文件 用字母(f)表示
- : 目录文件 用字母(d)表示
- : 链接文件 用字母(l)表示
- : 管道文件 用字母(p)表示
- : 字符设备文件 用字符(c)表示
- : 套接字文件 用字符(s)表示
- :块设备文件 用字符(b)表示
至于什么文件存储什么内容,是怎样存储,各有什么意义?后面我们学到在仔细讲解
什么是标准I/O?
就是指ANSI c中定义的用于输入和输出(I/O操作)的一系列函数。
注意:1.只要操作系统有C库,就可以使用标准I/O。
- 标准I/O有缓冲区,文件I/O没有缓存区。
- 标准I/O有流,文件I/O没有流。(因为标准I/O有缓冲区,文件I/O没有缓存区。)
- 有缓冲区的意义:可以减少系统调用的次数。
那么什么是系统调用呢?
系统调用就是内核给系统操作的接口。(就是一组函数)
缓冲区的几种缓冲类型。
全缓存:缓冲区满、强制刷新、文件关闭、程序结束时刷新缓冲区
行缓存:遇到换行符、强制刷新、文件关闭、程序结束时刷新缓冲区
不缓存:没有缓存区
讲解此图:文件(我们写的程序)进入内核空间时,当传入内容字节数小时:可直接进入内核空间,当传入内容字节多时:先到缓冲区缓冲再进入内核空间。注意:再次期间,内核空间和文件空间两者是互不侵犯,互不干扰的。要想文件的内容写入内核空间再到硬件的硬盘,首先文件进入内核空间需要一个接口,这个接口就是系统调用(函数)。缓冲区的文件内容进入时也是要通过接口(系统调用)。到文件在硬盘往出读时,与文件往进写时一样的操作。
此图讲解:文件一次将所有内容读到系统分配的读缓冲区,由于程序定义的buf空间只有100个字节,因此读缓冲区的内容,有序并连续的将内容读入buf空间。这个过程就叫做读入流。
写入流:与读入流一样,只不过写文件恰恰相反。
总结:打开文件,就会有缓冲区产生,也会有流出现,所以说,打开文件,就是说打开了流,读文件也叫对流进行读操作,写文件也叫对流进行写操作,关闭文件也叫关闭流。对流的操作就是对文件的操作。
打开标准I/O流的mode函数
FILE *fp=fopen(“1.txt”,”r”);
这行代码表示打开一个只读的1.txt文件。注意如果没有1.Txt文件则会打开失败。
FILE *fp=fopen(“1.txt”,”w”);
这行代码表示打开一个只写的1.txt文件。注意如果没有创建1.txt文件,就会自动创建一个1.txt文件。如果有1.txt文件并且应有内容,将会清除1.txt中所有内容。
FILE *fp=fopen(“1.txt,”a”);
这行代码表示以附加方式打开一个可读可写文件。注意:1.txt文件存在时,不会被清除内容,要写的内容会被加到1.txt原有内容的后面。1.txt文件如果不存在时,将创建文件。
注意:fopen是打开流(打开文件)的函数。“r,w,a”这些是打开什么属性文件的表示符。