MDGSF Software Engineer

[C Primer Plus] 复习笔记--第13章


1. ANSI C 提供了文件的两种视图

  1. 文件视图

  2. 二进制视图

2. 文件也分为

  1. 文本文件

  2. 二进制文件

3

通常,对于文本文件使用文本视图,对于二进制文件使用二进制视图。

但是,您也可以使用任一视图处理任一文件。

4

MS-DOS 文本文件用回车符和换行符的组合 \r\n 来表示结尾。

Macintosh 文本文件只使用一个回车符 \r 来表示结尾。

C 程序使用一个 \n 表示结尾。

如果C程序以文本视图模式处理一个MS-DOS文本文件,在读取文件时它会 将 \r\n 转换为 \n ,在写入文件时将 \n 转换为 \r\n 。

而使用二进制视图,程序将会看到文件中的 \r 和 \n 字符,没有任何映射发生。

5

UNIX仅采用一种文件结构,所以这两种视图在UNIX实现中就是相同的。

6. 两个I/O级别

  1. 低级I/O:使用操作系统提供的基本I/O服务。

  2. 标准高级I/O:使用标准的C库函数包和stdio.h头文件的定义。

7

C 程序自动帮我们打开3个文件:标准输入,标准输出和标准错误输出。

8

标准I/O包相对于低级I/O有两点优势:

  1. 标准I/O包中有很多专用的函数。

  2. 对输入和输出进行了缓冲。

9

“r” 打开一个文本文件,可以读取文件

“w” 打开一个文本文件,可以写入文件,先将文件的长度截为零。如果该文件不存在则先创建之。

“a” 打开一个文本文件,可以写入文件,向已有文件的尾部追加内容。如果该文件不存在则先创建之。

“r+” 打开一个文本文件,可以进行更新,也可以读取和写入文件。如果该文件不存在,则无法打开。

“w+” 打开一个文本文件,可以进行更新(读取和写入),如果该文件存在则先将其长度截为零,如果不存在则先创建之。

“a+” 打开一个文本文件,可以进行更新,向已有的文件尾部追加内容。如果该文件不存在则先创建之。 可以读取整个文件,但写入时只能追加内容。


“rb” “wb” “ab” “ab+” “a+b” “wb+” “w+b” “rb+” “r+b”

与前面的模式相似,只是使用二进制模式而非文本模式打开文件。

对于像 Unix 和 Linux 这样只有一种文件类型的系统,带 b 字母的模式和不带 b 字母的模式是相同的。

Tips:使用任何一种 w 模式打开一个已有的文件,文件内容将被删除,以便程序以一个空文件开始操作。

10

如果不能打开文件,fopen() 返回空指针。

11

ch = getchar(); //从标准输入获得一个字符。

ch = getc(fp); //从指针fp指定的文件中获得一个字符。

putc(ch, fpout);

putc(ch, stdout);

putchar();

12

C 输入函数直到尝试读取超出文件结尾的时候才会检测到文件结尾。

这意味着应该在一次尝试读取之后立即进行文件结尾判断。

int ch;
FILE * fp = fopen("wacky.txt", "r");
while ((ch = getc(fp) != EOF)
{
    putchar(ch);
}

13. fseek 和 ftell

SEEK_SET 文件开始

SEEK_cur 文件当前位置

SEEK_END 文件结尾

fseek(fp, 0, SEEK_SET); 文件开始处

fseek(fp, 10, SEEK_SET); 找到文件的第10个字符

fseek(fp, 2, SEEK_cur); 当前位置向前移动2个字节

fseek(fp, 0, SEEK_END); 文件结尾

fseek(fp, -10, SEEK_END); 从文件结尾处退回10个字节


weixingongzhonghao

Comments

Content