13.8 关键概念

C程序将输入看作字节流;流的来源可以是文件、输入设备(如键盘),甚至可以是另一个程序的输出。与之类似,C程序将输出也看作字节流;流的目的地可以是文件,视频显示等等。

C如何解释输入字节流和输出字节流依赖于所使用的输入输出函数。程序可以不加改动地读取或存储字节,也可以将字节解释为字符(随后可以把这些字符解释成普通的文本或者数字的文本表示)。与之类似,对于输出,所使用的函数决定了是将二进制值不加改动地转移,还是将其转换成为文本或数字的文本表示。如果需要在不损失精度的前提下保存或者恢复数字数据,请使用二进制模式,并利用fread()和fwrite()函数。如果是保存文本信息或者是要创建可以用普通文本编辑器查看的文件,请使用文本模式和诸如getc()、fprintf()之类的函数。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

要存取文件,需要创建一个文件指针(类型为FILE*)并将其和一个具体的文件名关联起来。后续代码就可以使用这个指针而不是文件名来处理该文件。

理解C如何处理文件结尾这一概念是很重要的。通常一个读取文件的程序使用循环读取输入,直到遇见文件的结尾。C输入函数直到尝试读取超出文件结尾的时候才会检测到文件结尾。这意味着应该在一次尝试读取之后立即进行文件结尾判断。在本章“文件结尾”小节中标明为“设计范例”的两个文件输入模型可以作为您编程时的示范。