- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
标准IO
一、流和FILE 对象
当用标准I/O 库打开或创建一个文件时,我们已使一个流与一个文件相关联。流的定向决
了所读、写的字符是单字节还是多字节的。当一个流最初被创建时,它并没有定向。如若在
未定向的流上使用一个多字节I/O 函数,则该流的定向被设置为宽定向的。若在未定向的流
上使用一个单字节I/O 函数,则将流的定向设置为字节定向的。
只有两个函数可以改变流的定向。Freopen 函数清除一个流的定向;fwide 函数设置流的定向。
#include stdio.h
#include wchar.h
Int fwide(FILE *fp, int mode);
返回值:若流是宽定向则返回正值,若流是字节定向则返回负值;或者若流是未定向的则返
回0。
参数介绍:
1.Fp 表示要设置其定向的那个流;
2.根据mode 参数的不同,fwide 函数执行不同的工作:
(1 若mode 参数为负,fwide 将试图使指定的流为字节定向的。
(2 若mode 参数为正,fwide 将试图使指定的流为宽定向的。
(3 若mode 参数为0 ,fwide 将不试图设置流的定向,但返回标识该流定向的值。
说明:
当打开一个流时,标准I/O 函数fopen 返回一个指向FILE 对象的指针fp。该对象(FILE *fp
通常是一个结构,它包含了标准I/O 库为管理该流所需要的所有信息,包括:用于实际I/O
的文件描述符、指向用于该流缓冲区的指针、缓冲区的长度、当前在缓冲区中的字符数以及
出错标志等等。
二、标准输入、标准输出和标准出错
对一个进程预定义了三个流,并且这三个流可以自动地被进程使用,它们是标准输入、标准
输出和标准出错。这些流引用的文件与文件描述符STDIN_FILENO、STDOUT_FILENO 和
STDERR_FILENO 所引用的文件相同。这三个标准I/O 流通过预定义文件指针stdin、stdout
和stderr 加以引用。这三个文件指针同样定义在头文件stdio.h中。
三、缓冲
标准I/O 库提供缓冲的目的是尽可能减少使用read 和write 调用的次数。标准I/O 提供了三种
类型的缓冲:
(1 全缓冲:在填满标准I/O 缓冲区后才进行实际I/O 操作。对于驻留在磁盘上的文件通常
是由标准I/O 库实施全缓冲的。在一个流上执行第一次I/O 操作时,相关标准I/O 函数通
常调用malloc 获得需要使用的缓冲区。
(2 行缓冲:在这种情况下,当在输入和输出中遇到换行符时,标准I/O 库执行I/O 操作。
这允许我们一次输出一个字符(用标准I/O fputc 函数 ,但只有在写了一行之后才进行实
际I/O 操作。当流涉及一个终端时,通常使用行缓冲。对于行缓存有两个限制,(1 )因
为标准I/O 库用来收集每一行的缓存的长度是固定的,所以,只要填满了缓存,即使没
有遇到新行符,也进行I/O 操作。(2 )任何时候只要通过标准输入输出库要求从(a )
一个不带缓存的流,或者(b 一个行缓存的流得到输入数据,那么就会造成刷新所有行
缓存输出流;
(3 不带缓冲:标准I/O 库不对字符进行缓冲存储。例如:标准出错流stderr 通常是不带缓
冲的,这就使得出错信息可以尽快的显示出来,而不管它们是否含有一个换行符。
说明:
ISO C 要求下列缓冲特征:
1.当且仅当标准输入和标准输出并不涉及交互式设备时,它们才是全缓冲的;2. 标准出错绝
不会是全缓冲的。
一般很多系统默认使用下列类型的缓冲:
1.标准出错是不带缓冲区的;2.如若是涉及终端设备的其他流,则它们是行缓冲的;否则是
全缓冲的。
1、用setbuf 和setvbuf 函数更改缓冲类型
有时候,对任何一个给定的流,我们并不喜欢这些系统默认的情况,则可调用下列函数更改
缓冲类型。
#incldue stdio.h
Void setbuf(FILE *restrict fp, char *restrict buf);
Int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size ;
返回值:成功返回0 ;出错返回非0 值。
参数介绍:
1. Fp 表示要其缓冲类型的流;
2. 可以使用setbuf 函数打开或关闭缓冲机制。为了带缓冲进行I/O,参数buf 必须指向一个
长为BUFSIZ 的缓冲区
文档评论(0)