- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.3标准IO
标准I/O
标准I/O库
流和FILE对象
文件指针
标准I/O操作
标准I/O库
库函数是一些完成常见的特定功能的函数,一般由某
个标准组织制作发丰。并形成一定的标准,库函数一
般可以应用于不同的平台面不需要做任何修改,具有
很好的可移植性。系统调用函数与操作系统直接相关
,不同的操作系统使用的调用可能不同,因此可移植
性不高。
库函数在实现中也可能需要使用系统调用,但它封装
了系统调用操作。用户不必关心使用了哪些系统调用
。
流和File对象
文件I/O函数都是针对文件描述符的。当打开一个文件
时,即返回一个文件描述符,然后该文件描述符就用
于后续的I/O操作。
而对于标准I/O库,它们的操作则是围绕流进行的。当
用标准I/O库打开或创建一个文件时,我们已使用一个
流与一个文件相关联。
文件流
流是一个抽象的概念,是物质从一处向另一处流动的
过程,多用于程序开发中。
在程序开发中,流是指信息从外部输入设备(如键盘
和磁盘)向计算机内部(即内存)输入或从内存向外
部输出设备(如显示器和磁盘)输出的过程,这种输
入输出过程被形象地比喻为“流”。
文件缓冲区
根据应用程序对文件的访问方式,即是否存在
缓冲区,文件系统分为缓冲区的文件系统
和非缓冲文件系统。
缓冲文件系统:高级文件系统,系统自动为正在使
用的文件开辟内存缓冲区。遵循ANSI 标准的I/O
函数使用的就是缓冲文件系统。
非缓冲文件系统:低级文件系统,由用户在程序中
为每个文件设定缓冲区。POSIX 标准的系统调用
I/O 函数使用的就是非缓冲文件系统
缓冲文件系统
标准的C 库函数建立在底层系统调用之上,即C 函数
库文件访问函数的实现中使用了文件I/O 系统调用。
标准的C 库中的文件处理函数为了减少使用系统调用
的次数,提高效率,根据应用的不同采用缓冲区机制
,这样,在对磁盘文件进行读操作时,可以一次性地
从文件中读出大量数据到缓冲区中,以后对这部分数
据的访问就不需要再使用系统调用了。在对磁盘文件
进行操作时,可以先将内容存储在文件缓冲区中,待
文件缓冲区满后再用系统调用将该文件一次写入到磁
盘。
根据使用领域的不同需求,标准C 函数使用了全缓冲
、行缓冲和无缓冲3 种缓冲区处理方式。
缓冲文件系统
全缓冲:这种情况下,在填满标准I/O缓冲区后才进行
实行I/O操作。
行缓冲:在这种情况下,当在输入和输出中遇到换行
符时,标准I/O库执行I/O操作。当流涉及一个终端时
,通常使用行缓冲。
不带缓冲:标准I/O库不对字符进行缓冲存储。
更改缓冲类型
Void setbuf(FILE*fp, char * buf)
Intsetvbuf(FILE*fp, char *buf, intmode, size_tsize)
返回值:成功返回0,出错返回非0值
这些函数一定要在流已被打开后调用,而且也应该在
对流执行任何其他操作之前调用。
文件指针
流是操作系统抽象出来的概念,其实体由操作系统维
护和管理,应用层开发只需使用流即可实现对文件的
访问。在应用层面,对文件流的访问通过文件指针
FILE 来实现
系统启动时默认打开了3 个文件,即至少拥有了3 个
流:标准输入、标准输出和标准出
错,这3 个流在缺省的情况下可被任意进程使用。在
标准I /O 流中通过预定义FILE 类型的
文件指针stdin、stdout和stderr来分别引用标准输入
、标准输出和标准出错
File结构体
文档评论(0)