欢迎来到天天文库
浏览记录
ID:19485893
大小:212.00 KB
页数:47页
时间:2018-10-02
《标准i o库课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、标准I/O库标准I/O库库函数是一些完成常见的特定功能的函数,一般由某个标准组织制作发丰。并形成一定的标准,库函数一般可以应用于不同的平台面不需要做任何修改,具有很好的可移植性。系统调用函数与操作系统直接相关,不同的操作系统使用的调用可能不同,因此可移植性不高。库函数在实现中也可能需要使用系统调用,但它封装了系统调用操作。用户不必关心使用了哪些系统调用。文件I/O和标准I/O库的区别linux的文件I/O是一种低级的I/O,由操作系统提供的基本IO服务,而标准I/O是ANSIC建立的一种标准I/O
2、模型,是一种标准函数包和stdio.h头文件中的定义,具有一定的可移植性。两者最大区别:标准I/O默认采用了缓冲机制,还创建了一个包含文件和缓冲区相关数据的数据结构;文件I/O一般没有采用缓冲模式,需要自己创建缓冲区。一种是标准库封装系统调用而成,更高级,一种是系统提供的,比较低层。1.1文件基本概念流和FILE对象前一节中,我们讲述所有I/O函数都是针对文件描述符的。当打开一个文件时,即返回一个文件描述符,然后该文件描述符就用于后续的I/O操作。而对于标准I/O库,它们的操作则是围绕流进行的。当
3、用标准I/O库打开或创建一个文件时,我们已使用一个流与一个文件相关联。文件流流是一个抽象的概念,是物质从一处向另一处流动的过程,多用于程序开发中。在程序开发中,流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存)输入或从内存向外部输出设备(如显示器和磁盘)输出的过程,这种输入输出过程被形象地比喻为“流”。文件缓冲区根据应用程序对文件的访问方式,即是否存在缓冲区,文件系统分为缓冲区的文件系统和非缓冲文件系统。缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区。本章介绍的遵
4、循ANSI标准的I/O函数使用的就是缓冲文件系统。非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区。POSIX标准的系统调用I/O函数使用的就是非缓冲文件系统缓冲文件系统A程序数据区输入文件缓冲区输入文件缓冲区磁盘文件缓冲文件系统标准的C库函数建立在底层系统调用之上,即C函数库文件访问函数的实现中使用了文件I/O系统调用。标准的C库中的文件处理函数为了减少使用系统调用的次数,提高效率,根据应用的不同,如图所示采用缓冲区机制,这样,在对磁盘文件进行读操作时,可以一次性地从文件中读出大
5、量数据到缓冲区中,以后对这部分数据的访问就不需要再使用系统调用了。在对磁盘文件进行操作时,可以先将内容存储在文件缓冲区中,待文件缓冲区满后再用系统调用将该文件一次写入到磁盘。根据使用领域的不同需求,标准C函数使用了全缓冲、行缓冲和无缓冲3种缓冲区处理方式。全缓冲:这种情况下,在填满标准I/O缓冲区后才进行实行I/O操作。行缓冲:在这种情况下,当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。当流涉及一个终端时,通常使用行缓冲。不带缓冲:标准I/O库不对字符进行缓冲存储。非缓冲文件系统用户数
6、据区磁盘指今区缓冲区程序非缓冲区非缓冲区的文件访问方式,每次在对该文件进行任何一次读写操作时,都需要使用读写文件系统调用来处理该操作,因此,如果用户程序需要访问磁盘空间中的某个文件,则每访问一次都需要执行一次系统调用。在这个过程中,系统需要从用户空间切换到内核空间,实现上下文的切换,这将损耗一定的CPU时间,频繁的磁盘访问对程序的执行效率将造成很大影响更改缓冲类型Voidsetbuf(FILE*fp,char*buf)Intsetvbuf(FILE*fp,char*buf,intmode,siz
7、e_tsize)返回值:成功返回0,出错返回非0值这些函数一定要在流已被打开后调用,而且也应该在对流执行任何其他操作之前调用。1.2文件指针文件指针与文件描述符区别文件描述符,在linux系统中,设备也是以文件的形式存在,要对该设备进行操作就必须先打开这个文件,打开这个文件,就会获得这个文件描述符,它是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。文件描述符的优点:兼容POSIX标准,许多Linux和UNIX系统调用都依赖于它。文件描述符的缺点:可移植性差,也
8、不直观。文件指针,C语言中使用的是文件指针,而不是文件描述符做为I/O的句柄."文件指针(filepointer)"指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符值.而文件描述符值是文件描述符表中的一个索引.从某种意义上说文件指针就是句柄的句柄。文件指针流是操作系统抽象出来的概念,其实体由操作系统维护和管理,应用层开发只需使用流即可实现对文件的访问。在应用层面,对文件流的访问通过文件指针FILE来实现系统启动时默认打开了3个文件,即至
此文档下载收益归作者所有