一、与文件进行通信
1) 程序从文件中读取信息或把信息写入文件,这种交互形式就是文件重定向
2) 文件通常是在磁盘或固体硬盘上的一段已命名的存储区
3) C把文件看作是一系列连续的字节,每个字节都能被单独读取
4) C提供两种文件模式: 文件模式和二进制模式
1.文本模式和二进制模式(两种访问文件的途径)
1) 所有文件的内容都以二进制形式(0或1)储存
2) 如果文件最初使用二进制编码的字符表示文本,该文件就是文本文件,其中包含文本内容
3) 如果文件中的二进制值代表机器语言代码或数值数据或图片或音乐编码,该文件就是二进制文件,其中包含二进制内容
4) 在二进制模式中,程序可以访问文件的每个字节
5) 在文本模式中,程序所见的内容和文件的实际内容不同(读取文件时把本地环境表示的行末尾或文件末尾映射为C模式)
2.I/O的级别(处理文件访问的两个级别)
1) 底层I/O使用操作系统提供的基本I/O服务
2) 标准高级I/O使用C库的标准包和stdio.h头文件定义
3.标准文件
C程序会自动打开三个文件,它们被称为标准输入(键盘)、标准输出(显示屏)和标准错误输出
二、标准I/O
1) 在最初调用的main(0中使用return与调用exit()的效果相同
2) 如果main()在一个递归程序中,exit()仍然会终止程序,但是return只会把控制权交给上一级递归,直至最初的一级
3) 在其他函数中(除main()以外)调用exit()也能结束整个程序
1.fopen()函数(打开文件) //stdio.h
1) fopen()函数的第一个参数是待打开文件的名称(包含该文件名的字符串地址)
2) fopen()函数的第二个参数是一个字符串,指定待打开文件的模式
模式字符串 | 含义 |
---|---|
"r" | 以读模式打开文件 |
"w" | 以写模式打开文件,把现有文件的长度截为0,如果文件不存在则创建一个新文件 |
"a" | 以写模式打开文件,把现有文件末尾添加内容,如果文件不存在则创建一个新文件 |
"r+" | 以更新模式打开文件(即可以读写文件) |
"w+" | 以更新模式打开文件(读和写),如果文件存在,则将其长度截为0;如果文件不存在则创建一个新文件 |
"a+" | 以更新模式打开文件(读和写),在现有文件的末尾添加内容,如果文件不存在则创建一个新文件;可以读整个文件,但是只能从末尾添加内容 |
"rb"、"wb"、"ab"、"ab+"、"a+b"、 "wb+"、"w+b"、"ab+"、"a+b" |
与上一个模式类似,但是以二进制模式而不是文本模式打开文件 |
"wx"、"wbx"、"w+x"、"wb+x"、"w+bx" | C(11)类似非x模式,但是如果文件已存在或以独占模式打开文件,则打开文件失败 |
3) 像UNIX和Linux这样只有一种文件类型的系统,带b字母的模式和不带b字母的模式相同
4) 使用带x字母的写模式,即使fopen()操作失败,原文件的内容也不会被删除
5) 如果环境允许,x模式的独占性使得其他程序或线程无法访问正在被打开的文件
6) 如果使用带x字母的任何一种模式,将无法打开一个现有文件