04标准I库.doc

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

标准I/O库 上章回顾: 系统调用有关I/O操作的函数有哪些? 文件描述符的本质是什么类型?标准输入、输出、错误描述符的宏是什么? STDIN_FILENO creat函数可以用哪个函数替代?写出来 作业检查: 本章预习 流与FILE、I/O缓冲区、读写定位流、格式化I/O,临时文件,文件描述符与FILE区别 一、概述 1、为什么要学标准I/O库: 标准I/O库是由ISO C标准说明定义,通常简称stdio(stdio.h就是由此而来),它实现了一个跨 平台用户缓冲的解决方案,使得该库使用简单、功能强大。与系统I/O相比,它处理很多细节,如 缓冲机制的实现,它封装了系统调用函数。标准库可以提高读写效率,下面是影响读写效率的因素: 1) 、所有磁盘操作都是基干块行的。因此,当请求以块大小整数倍对齐地址时,I/O效率最 理想; 2) 、操作效率随系统调用次数的增多而急剧下降。 3) 、如果所读内客跨越块,即使读取字节数不多,效率也不高,因为至少要读两次。 2、应用如何选择哪套函数? 一个程序究竟使用标准I/O合适还是直接使用系统调用更合适,需要设计者权衡利弊。即 平衡吋间效率与空间效率,才能做出决定。 参考思路为:要求时间效率就调川库;要空间效率就考虑川系统调用;要跨平台提高兼容性则 用标准库函数。 二、流和FILE对象 1、基础概念: 1) 、什么叫流:在标准库里,把一个打开的文件叫做流(stream)。 2) 、系统调用与标准IO库区别:系统调用中的IO函数都是针对文件描述,该描述符与文 件对应。 而标准10库则是围绕着FILE结构体类型的指针进行的,用标准I/O库函数打开或创建流 后,该流就与文件相关联。FILE结构体包含了标准I/O库为管理该流所需要的所有信息。如: 文件描述符,流缓冲区指针、缓冲区 文件描述符,流缓冲区指针、缓冲区K:度、当前缓冲区屮的字符数以及出错标志等 三、标准输入、标准输出、标准出错 1、认识FILE结构体 typedef struct _IO_FILE FILE; struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ ^define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */ char* _IO_read_ptr; /* Current read pointer */ char* _IO_read_end; /* End of get area. */ char* _IO_read_base; /* Start of putback+get area. */ char* _IO_write_base; /* Start of put area. */ char* _IO_write_ptr; /* Current put pointer. */ char* _IO_write_end; /* End of put area. */ char* IO buf base; /* Start of reserve area. */ char* IO buf end; /* End of reserve area. */ /* The following fields are used to support backing up and undo. */ char *_IO_save_base; /* Pointer to start of non-current get area. */ char *_IO_backup_base; /* Pointer to first valid character of backup area */ char *_IO_save_end; /* Pointer to end of non-current get area. */ struct IO marker * markers; struct IO FILE * chain; int _fileno;//文件描述符 int _flags2; _IO_off_t _old_offset; /* This used to be —offset but its too small. */ #define _HAVE_COLUMN /* temporary */ /* l+column number of pbase(); 0 i

文档评论(0)

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

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

1亿VIP精品文档

相关文档