欢迎来到天天文库
浏览记录
ID:21114110
大小:137.85 KB
页数:10页
时间:2018-10-19
《04--标准io库》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、标准I/O库上章回顾:系统调用有关I/O操作的函数有哪些?文件描述符的本质是什么类型?标准输入、输出、错误描述符的宏是什么?STDIN_FILENOcreat函数可以用哪个函数替代?写出来作业检查:本章预习流与FILE、I/O缓冲区、读写定位流、格式化I/O,临时文件,文件描述符与FILE区别一、概述1、为什么要学标准I/O库:标准I/O库是由ISOC标准说明定义,通常简称stdio(stdio.h就是由此而来),它实现了一个跨平台用户缓冲的解决方案,使得该库使用简单、功能强大。与系统I/O相比,它处理很多细节,如缓冲机制的实现,它封装了系统调用函数。标准库可以提高读写效率,下面是影响读写
2、效率的因素:1)、所有磁盘操作都是基干块行的。因此,当请求以块大小整数倍对齐地址时,I/O效率最理想;2)、操作效率随系统调用次数的增多而急剧下降。3)、如果所读内客跨越块,即使读取字节数不多,效率也不高,因为至少要读两次。2、应用如何选择哪套函数?一个程序究竟使用标准I/O合适还是直接使用系统调用更合适,需要设计者权衡利弊。即平衡吋间效率与空间效率,才能做出决定。参考思路为:要求时间效率就调川库;要空间效率就考虑川系统调用;要跨平台提高兼容性则用标准库函数。二、流和FILE对象1、基础概念:1)、什么叫流:在标准库里,把一个打开的文件叫做流(stream)。2)、系统调用与标准IO库区别
3、:系统调用中的IO函数都是针对文件描述,该描述符与文件对应。而标准10库则是围绕着FILE结构体类型的指针进行的,用标准I/O库函数打开或创建流后,该流就与文件相关联。FILE结构体包含了标准I/O库为管理该流所需要的所有信息。如:文件描述符,流缓冲区指针、缓冲区K:度、当前缓冲区屮的字符数以及出错标志等三、标准输入、标准输出、标准出错1、认识FILE结构体typedefstruct_IO_FILEFILE;struct_IO_FILE{int_flags;/*High-orderwordis_IO_MAGIC;restisflags.*/^define_IO_file_flags_fla
4、gs/*ThefollowingpointerscorrespondtotheC++streambufprotocol.*//*Note:Tkusesthe_IO_read_ptrand_IO_read_endfieldsdirectly.*/char*_IO_read_ptr;/*Currentreadpointer*/char*_IO_read_end;/*Endofgetarea.*/char*_IO_read_base;/*Startofputback+getarea.*/char*_IO_write_base;/*Startofputarea.*/char*_IO_write_p
5、tr;/*Currentputpointer.*/char*_IO_write_end;/*Endofputarea.*/char*IObufbase;/*Startofreservearea.*/char*IObufend;/*Endofreservearea.*//*Thefollowingfieldsareusedtosupportbackingupandundo.*/char*_IO_save_base;/*Pointertostartofnon-currentgetarea.*/char*_IO_backup_base;/*Pointertofirstvalidcharacter
6、ofbackuparea*/char*_IO_save_end;/*Pointertoendofnon-currentgetarea.*/structIOmarker*markers;structIOFILE*chain;int_fileno;//文件描述符int_flags2;_IO_off_t_old_offset;/*Thisusedtobe—offsetbutit'stoosmall.*/#define_HAVE_COLUMN/*temporary*//*l+columnnumberofpbase();0isunknown.*/unsignedshort_cur_column;si
7、gnedchar_vtable_offset;char_shortbuf[l];/*char*_save_gptr;char*_save_egptr;*/_IO_lockj*_lock;};2、两组宏定义FILE*stdin,*stdout,*stderr(stdio.h)intSTDIN_FILENO,STDOUT_FILENO,STDERR_FILENO(unistd.h)相关函数fileno(FILE*fp)可以取
此文档下载收益归作者所有