C

C 知识量:16 - 74 - 317

13.1 与文件进行通信><

什么是文件- 13.1.1 -

文件(file)通常是在磁盘或固态硬盘上的一段已命名的存储区。例如:stdio.h就是一个文件的名称,该文件中包含一些有用的信息。

C把文件看作是一系列连续的字节,每个字节都能被单独读取。C提供两种文件模式:文本模式和二进制模式。

文本模式和二进制模式- 13.1.2 -

所有文件的内容都以二进制形式(0或1)储存。

  • 如果文件最初使用二进制编码的字符(例如,ASCII或Unicode)表示文本,该文件就是文本文件,其中包含文本内容。

  • 如果文件中的二进制值代表机器语言代码或数值数据或图片或音乐编码,该文件就是二进制文件,其中包含二进制内容。

C提供两种访问文件的途径:二进制模式和文本模式。

  • 在二进制模式中,程序可以访问文件的每个字节。

  • 在文本模式中,程序所见的内容和文件的实际内容不同。

程序以文本模式读取文件时,把本地环境表示的行末尾或文件结尾映射为C模式。例如,C程序在旧式Macintosh中以文本模式读取文件时,把文件中的\r转换成\n;以文本模式写入文件时,把\n转换成\r。或者,C文本模式程序在MS-DOS平台读取文件时,把\r\n转换成\n;写入文件时,把\n转换成\r\n。在其他环境中编写的文本模式程序也会做类似的转换。

除了以文本模式读写文本文件,还能以二进制模式读写文本文件。如果读写一个旧式MS-DOS文本文件,程序会看到文件中的\r和\n字符,不会发生映射。如果要编写旧式Mac格式、MS-DOS格式或UNIX/Linux格式的文件模式程序,应该使用二进制模式,这样程序才能确定实际的文件内容并执行相应的动作。

I/O的级别- 13.1.3 -

除了选择文件的模式,还可以选择I/O的两个级别(即处理文件访问的两个级别)。

  • 底层I/O(low-level I/O)使用操作系统提供的基本I/O服务。

  • 标准高级I/O(standardhigh-level I/O)使用C库的标准包和stdio.h头文件定义。

因为无法保证所有的操作系统都使用相同的底层I/O模型,C标准只支持标准I/O包。

标准文件- 13.1.4 -

C程序会自动打开3个文件,分别是:

  • 标准输入(standardinput)

  • 标准输出(standard output)

  • 标准错误输出(standarderror output)

在默认情况下,标准输入是系统的普通输入设备,通常为键盘;标准输出和标准错误输出是系统的普通输出设备,通常为显示屏。

标准输入为程序提供输入,它是getchar()和scanf()使用的文件。

程序通常输出到标准输出,它是putchar()、puts()和printf()使用的文件。

标准错误输出提供了一个逻辑上不同的地方来发送错误消息。例如,如果使用重定向把输出发送给文件而不是屏幕,那么发送至标准错误输出的内容仍然会被发送到屏幕上。