C Primer Plus 第13章 文件输入/输出 13.1和文件进行通信

在本章中您将学习下列内容:
*函数:
fopen(),getc(),putc(),exit(),fclose(),fprintf(),fscanf(),fgets(),fputs(),rewind(),fseek(),
ftell(),fflush(),fgetpos(),fsetpos(),feof(),ferror(),ungetc(),setvbuf(),fread(),fwrite()
*如何使用C的标准I/O函数系列处理文件。
*文本模式和二进制模式,文本格式和二进制格式,以及缓冲和非缓冲I/O。
*使用即可以顺序存取文件又可以随机存取文件的函数。

13.1  和文件进行通信

13.1.1  文件是什么

一个文件(file)通常就是磁盘上的一段命名的存储区。比如,stdio.h就是一个包含一些有用信息的文件的名称。但对于操作系统来说,文件就会更复杂一些。例如,一个大文件可以存储在一些分散的区段中,或者还会包含一些使操作系统可以确定其文件类型的附加数据,但是这些是操作系统而不是程序员(除非您是在编写操作系统)要考虑的。您需要考虑的是如何 在C程序中处理文件。

C将文件看成是连续的字节序列,其中每一个字节都可以单独的读取。这与UNIX环境(C的发源地)中的文件结构是一致的。因为其他环境中的文件模型可能会有所不同,所以ANSIC提供了文件的两种视图:文本视图和二进制视图。

13.1.2  文本视图和二进制视图

在二进制视图中,文件中的每个字节都可以为程序所访问在文本视图中,程序看到的内容和文件的内容有可能不同。例如,使用文件视图读取文件时,将把行尾的本地环境表示法映射为C视图与之类似,在输出的时候,也会将C视图中的行尾表示映射为本地环境表示法。例如,MS-DOS文本文件用回车和换行符的组合\r\n来表示行尾。Macintosh文本文件只用一个回车符\r来表示行尾。C程序使用一个\n表示行尾。所以,如果C程序以文本视图模式处理一个MS-DOS文本文件,在读取文件时,它会将\r\n换成\n,在写入文件的时候它会将\n换成\r\n;而对于Macintosh文本文件的文本视图,在读取文件时它会把\r换成\n,在写入文件的时候它会将\n换成\r。

处理一个MS-DOS文本文件不必局限于仅仅使用文本视图。对这样的文件还可以使用二进制视图。如果是这样,程序将看到文件中的\r和\n字符,没有任何映射发生。MS-DOS区分文本文件和二进制文件,但C提供的是文本和二进制视图。通常,对于文本文件使用文本视图,对于二进制文件使用二进制视图。但是您可以使用任一种视图处理任一种文件,尽管使用文本视图处理二进制文件的效果很糟。

尽管ANSI C提供了文本视图和二进制视图,但这两种视图的实现可以是相同的。例如,由于UNIX仅采用一种文件结构,所以这两种视图在UNIX实现中就是相同的。

13.1.3  I/O级别

除了可以选择文件的视图,在大多数情况下,您还可以在两个I/O级别(即两种处理文件存取的级别)中进行选择。低级I/O使用操作系统提供的基本I/O服务;标准高级I/O使用一个C库函数包和stdio.h头文件中的定义。因为无法保证所有的操作系统都可以用相同的低级I/O模型表示,所以ANSI C只支持标准I/O包

13.1.4  标准文件

C程序自动为您打开3个文件。这3个文件被称为标准输入(standard input),标准输出(standard output)和标准错误输出(standard error output)

默认的标准输入是系统的一般输入设备,通常为键盘;默认的标准输出和标准错误输出是系统的一般输出设备,通常为显示器。

用标准输入为您的程序提供输入是很自然的事情,它是getchar()、gets()和scanf()读取的文件。标准输出是常用的程序输出对象,为putchar()、puts()和printf()所使用。在第8章中学过的重定向方法可以把其他文件作为标准输入或者标准输出。标准错误输出提供一个可供发送错误消息的逻辑上不同的位置。例如,如果使用重定向方法将输出发送到一个文件中而不是屏幕上,发送到标准错误输出的输出内容仍然会被发送到屏幕上。这样很好,因为如果错误信息被发送到文件的话,那么只有打开文件才可以看到。

 

转载于:https://my.oschina.net/idreamo/blog/832989

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值