- 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
您可能关注的文档
最近下载
- 国家开放大学《电子商务网站规划与设计》大作业参考答案.docx
- 中国农村居民人均收入及消费支出分析毕业论文.docx
- DBJ/T45-066-2018(J11629-2018)广西岩土工程勘察规.pdf
- 2024年春上海开放大学马克思主义基本原理计分作业1-8答案.pdf
- 基于Node和VUE3.0的景区旅游APP系统设计与实现.docx VIP
- (正式版)D-L∕T 806-2013 火力发电厂循环水用阻垢缓蚀剂.docx VIP
- 双光镜片屈光度检测修改完20201013.ppt
- 23G523-1_型钢混凝土组合结构构造 图集.docx
- 锅炉给水泵检修方案.doc
- 第16课 国家出路的探索与列强侵略的加剧说课课件 高中历史统编版(2019)必修中外历史纲要上册.pptx
文档评论(0)