标准IO.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档