04--标准IO库.doc

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

标准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函数都是针对文件描述,该描述符与文件对应。 而标准IO库则是围绕着FILE结构体类型的指针进行的,用标准I/O库函数打开或创建流后,该流就与文件相关联。FILE结构体包含了标准I/O库为管理该流所需要的所有信息。如:文件描述符,流缓冲区指针、缓冲区长度、当前缓冲区中的字符数以及出错标志等。 三、标准输入、标准输出、标准出错 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 /* tempora

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档