网站大量收购闲置独家精品文档,联系QQ:2885784924

Unix系统编程..doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unix系统编程.

《UNIX环境高级编程》 第五章 标准I/O库 1. Unix系统标准I/O库是在系统调用函数基础上构造的。 2. 流和FILE对象: ? 流的概念:ANSI C对程序移进或移出字符的操作进行了抽象,将字节流成为“流”,当程序打开或 写入一个文件时,此时就已经使得流与文件进行了结合。 流的类型主要有:文本流,二进制流. 一个进程已经预定了三个流,即标准输入,标准输出和标准出错。在文件中,分别对应的是STDIO_FILENO,STDOUT_FILENO和STDERR_FILENO.这三种流可以通过预定义FILE指针stdio, stdout和stderr加以引用。这些均定义在stdio.h头文件中! ? FILE对象的概念:FILE是一种数据结构,用于访问一个流,不能与存储在磁盘上的文件进行混淆。 3. 错误报告函数perror: 在I/O函数中,随时存在错误的可能,标准库函数在一个外部整型变量errno 中保存错误代码之后再将这个信息传递给用户程序,并提示错误的准确原因。 void perror(char const *message) 返回值:若message非空,则perror会打印出message中的内容,后面跟一个分号和一个空格,然后打印出一条解释error当前错误代码的信息。 4. 缓存: 标准I/O库提供了三种不同的缓存类型:全缓存,行缓存和无缓存。 ? 全缓存:对于驻留在磁盘上的文件通常是由标准I/O实施全缓存的。 ? 行缓存:当流涉及到一个终端(标准输入或者标准输出)时,典型地使用行缓存。 行缓存存在以下几个限制: 因为标准I/O库用来收集每一行的缓存的长度是固定的,所以只要填满了缓存,那么即使还没有写一个新行符,也进行I/O操作. 任何时候只要通过标准输入输出库要求从一个不带缓存的流,或一个行缓存的流(它预先要求从内核得到数据)得到输入数据,那么就会造成刷新所有行缓存输出流. 这也正是如printf函数向标准输出输出信息时会立即在终端上输出,而不管是否行缓存是否填满。 【注意】fflush函数在全缓存和行缓存方面存在差异:对于全缓冲,fflush移位着将缓存中的内容写入到磁盘上,而在行缓存方面,fflush表示丢弃已经存在缓存中的数据。 不带缓存 ANSI C要求下列缓存特征: 当且仅当标准输入和标准输出并不涉及交互作用设备时,它们才是全缓存的。 标准出错决不会是全缓存的。 ? 改变缓存方式: void setbuf(FILE *fp, char *buf) int setvbuf(FILE *fp, char * buf, int mode, size_t size) setbuf可以打开或者关闭缓存机制,当参数buf设置为空时,则会关闭缓存机制。否则,参数buf必须指向一个长度为BUFSIZ(1024)的缓存(参数在stduo.h定义) ,为一个流自行制定缓存区可以防止I/O函数库默认为它动态分配一个未知的缓冲区。 流与缓存的关系:当用setbuf函数为某个流指定了缓存关系后,此时可以看做流是指向缓存空间的,或者可以理解为它们共享一个内存区域。 setbuf函数运用经典错误与解释: 【解释】源程序在利用setbuf函数将标准输出流定向于buf数组之后,将会导致一个错误。因为buf是一个内部数组,而buf得到fflush的最后时刻是main函数结束之后,但是此时buf早已释放掉了,从而导致未能输出。解决方法就是将buf数组声明为静态数组或者直接放在函数外面。 对比setbuf函数,setvbuf函数的功能则更加强大,她不仅自行设置缓存区的大小(size),而且还可以直接指定缓存的类型(mode)。 _IOFBF 全缓存 _IOLBF 行缓存 _IONBF 不带缓存 5. 打开与关闭流操作函数:#include stdio.h FILE *fopen(const char *pathname, const char *type) FILE *freopen(const char *pathname, char *type, FILE *fp)-----------重定向 FILE *fdopen(int filedes, const char *type) ? fopen是一个普通的打开流的函数,若成功,它的返回值为指向FILE结构的指针;否则返回一个NULL指针。 【注意】在利用fopen函数试图打开文件时,一定要检查函数的返回值,因为若出现错误,它会返回一个NULL指针,这会对后面I/O操作造成错误。常见type有: ? freope

文档评论(0)

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

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

1亿VIP精品文档

相关文档