- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 04建筑屋面及防水工程施工总结.doc
- 05生物化学习题与解析脂类代谢.doc
- 05电力拖动控制线路与技能训练教学大纲.doc
- 05移动网M北向接口技术规范MGW性能测量参数(v300).doc
- 05综合自动化技术规范书.doc
- 05诱人的瓜果教学设计1.doc
- 05连续梁钢筋施工技术交底书.doc
- 06FLTE网络负荷均衡优化案例总结贵阳.doc
- 06可编程序控制器及其应用教学大纲.doc
- 06台阶式溢流坝跌落水流时压强特性研究.doc
- 绿电2022年系列报告之一:业绩利空释放,改革推动业绩反转和确定成长.docx
- 化学化工行业数字化转型ERP项目企业信息化规划实施方案.pdf
- 【研报】三部门绿电交易政策解读:溢价等额冲抵补贴,绿电交易规模有望提升---国海证券.docx
- 中国债券市场的未来.pdf
- 绿电制绿氢:实现“双碳”目标的有力武器-华创证券.docx
- 【深度分析】浅析绿证、配额制和碳交易市场对电力行业影响-长城证券.docx
- 绿电:景气度+集中度+盈利性均提升,资源获取和运营管理是核心壁垒.docx
- 节电产业与绿电应用年度报告(2022年版)摘要版--节能协会.docx
- 2024年中国人工智能系列白皮书-智能系统工程.pdf
- 如何进行行业研究 ——以幼教产业为例.pdf
文档评论(0)