书签 分享 收藏 举报 版权申诉 / 140
上传文档赚钱

类型文件系统[页]课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4702093
  • 上传时间:2023-01-02
  • 格式:PPT
  • 页数:140
  • 大小:560.01KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《文件系统[页]课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    文件系统 课件
    资源描述:

    1、第六章第六章 文件系统文件系统操作系统操作系统 16.1 概述概述(1)字段字段 数据的基本单位,字段又可称为域或数数据的基本单位,字段又可称为域或数据项。不可分隔的字段含有一个简单的值,如姓据项。不可分隔的字段含有一个简单的值,如姓名、日期、传感器读入的值等。字段的特征可由名、日期、传感器读入的值等。字段的特征可由长度和数据类型表示。字段可以是固定长度的或长度和数据类型表示。字段可以是固定长度的或可变长度的。可变长度的。(2)记录记录 能被某些应用程序处理的相关字段的能被某些应用程序处理的相关字段的集合。例如,雇员记录可包括姓名、社会保险号、集合。例如,雇员记录可包括姓名、社会保险号、工种、

    2、雇用日期等。记录可以是固定长度或可变工种、雇用日期等。记录可以是固定长度或可变长度的。长度的。2(3)文件文件 相同记录的集合,可以用名字来引用,相同记录的集合,可以用名字来引用,并可以产生和删除。存取控制通常施加到文件并可以产生和删除。存取控制通常施加到文件这一级。在某些复杂的系统中,存取控制能施这一级。在某些复杂的系统中,存取控制能施加到记录级,甚至字段级。加到记录级,甚至字段级。(4)数据库数据库 相关数据的集合。数据库的基本特征相关数据的集合。数据库的基本特征是在数据元素之间存在明显的关系。是在数据元素之间存在明显的关系。(5)文件管理系统文件管理系统 文件管理系统是为用户和用户文件管

    3、理系统是为用户和用户程序在使用文件时提供服务的系统软件集合。程序在使用文件时提供服务的系统软件集合。一般用户或应用程序存取文件时必须通过文件一般用户或应用程序存取文件时必须通过文件管理程序。文件管理系统避免了用户或程序设管理程序。文件管理系统避免了用户或程序设计员必须为每种应用都开发特定目的软件,提计员必须为每种应用都开发特定目的软件,提供了控制系统中最重要财富供了控制系统中最重要财富文件文件的方法。的方法。32 文件的组织和存取文件的组织和存取 文件组织文件组织指的是由存取方法决定的记录的逻辑指的是由存取方法决定的记录的逻辑结构。在外存中文件的物理组织取决于组块策略结构。在外存中文件的物理组

    4、织取决于组块策略和文件分配策略。和文件分配策略。在选择文件组织方法时,有几个重要的参考标在选择文件组织方法时,有几个重要的参考标准:准:n 存取快速存取快速n 更新容易更新容易n 节省存储单元节省存储单元n 管理简单管理简单n 可靠性可靠性 在图在图6-1中描述了普通文件的组织方法中描述了普通文件的组织方法:4可变长度记录可变字段集合时间序排列(a)堆文件关键字字段(b)顺序文件固定长度记录固定次序、固定集合的字段按关键字的顺序(c)索引顺序文件索引链索 引指针主文件溢出指针溢出文件(d)索引文件详尽索引1详尽索引2部分索引1可变长度记录主文件(e)散列文件f主文件溢出文件keyHash函数5

    5、(1)堆(堆(Pile)数据根据到达时间的顺序收集起来,每一个记数据根据到达时间的顺序收集起来,每一个记录包括一堆集中到达的数据。堆的目的只是简单地录包括一堆集中到达的数据。堆的目的只是简单地聚集大量的数据,并存储它。当收集数据时需先存聚集大量的数据,并存储它。当收集数据时需先存储再处理或数据不容易组织时,就可用到堆。储再处理或数据不容易组织时,就可用到堆。(2)顺序文件顺序文件使用固定格式的记录。所有记录的长度相等,使用固定格式的记录。所有记录的长度相等,含有相同个数、特定次序的固定长度字段。含有相同个数、特定次序的固定长度字段。由于每一个字段的长度和位置是已知的,所由于每一个字段的长度和位

    6、置是已知的,所以仅仅需要存储字段的值。每个字段的字段以仅仅需要存储字段的值。每个字段的字段名和长度归于文件结构的属性。名和长度归于文件结构的属性。顺序文件的另一种组织方法是采用链接表。顺序文件的另一种组织方法是采用链接表。6(3)索引顺序文件索引顺序文件索引顺序文件维护了顺序文件的关键字特征:索引顺序文件维护了顺序文件的关键字特征:记录以关键字字段的顺序组织。此外,还增加了记录以关键字字段的顺序组织。此外,还增加了两个新的特征:支持随机存取的文件索引和溢出两个新的特征:支持随机存取的文件索引和溢出文件。在索引文件中的每个记录包括两个字段:文件。在索引文件中的每个记录包括两个字段:一个是与主文件

    7、关键字相同的关键字字段。一个是与主文件关键字相同的关键字字段。另一另一个是指向主文件的指针。个是指向主文件的指针。(4)索引文件索引文件 需要使用多索引的结构。详尽的索引为主文需要使用多索引的结构。详尽的索引为主文件中的每一个记录建立一个入口项。部分索引件中的每一个记录建立一个入口项。部分索引对感兴趣字段的记录建立入口项。索引本身组对感兴趣字段的记录建立入口项。索引本身组织成一个顺序文件以便容易搜索。织成一个顺序文件以便容易搜索。7(5)散列文件散列文件 直接存取的散列文件使用对关键字值直接存取的散列文件使用对关键字值的散列。散列文件经常用于需要快速的散列。散列文件经常用于需要快速存取的场合。

    8、存取的场合。文件包括固定长度的记录,应用程序文件包括固定长度的记录,应用程序一般一次存取一个记录。一般一次存取一个记录。目录、调度表和名字表等都可使用散目录、调度表和名字表等都可使用散列文件。列文件。83 文件系统结构文件系统结构u 设备驱动程序负责对设备的启动设备驱动程序负责对设备的启动I/O操作,处操作,处理理I/O请求完成后的工作。请求完成后的工作。u 上一层是基本文件系统,或称物理上一层是基本文件系统,或称物理I/O层,这层,这一层是与计算机系统外部环境的主要接口一层是与计算机系统外部环境的主要接口u 基本基本I/O管理主要负责所有文件管理主要负责所有文件I/O的初始化的初始化和结束工

    9、作。在这一层,维护处理设备和结束工作。在这一层,维护处理设备I/O、调调度和文件的控制结构。度和文件的控制结构。I/O缓冲区的分配及外存缓冲区的分配及外存的定位工作也在这一层完成。的定位工作也在这一层完成。u 逻辑逻辑I/O使用户和应用程序能够存取记录。使用户和应用程序能够存取记录。u 最接近用户的文件系统层是存取方法层,其提最接近用户的文件系统层是存取方法层,其提供了用户与文件系统和存储数据的设备之间的供了用户与文件系统和存储数据的设备之间的标准接口。标准接口。9堆顺序索引顺序索引散列逻辑I/O基本I/O管理基本文件系统磁带驱动器磁盘驱动器图图 6-26-2文件系统软件结文件系统软件结构构用

    10、户程序106.2文件目录文件目录1 目录的内容目录的内容v 目录含有文件的信息,包括文件的属性、位置目录含有文件的信息,包括文件的属性、位置和属主等。目录本身也是文件和属主等。目录本身也是文件,各种文件管理例行各种文件管理例行程序要通过操作系统存取目录文件。程序要通过操作系统存取目录文件。v 目录提供了为用户和应用程序所知的文件名和目录提供了为用户和应用程序所知的文件名和文件实体本身的映射。文件实体本身的映射。v 所有的系统都要处理不同类型的文件和不同的所有的系统都要处理不同类型的文件和不同的文件组织,因此也要提供此类文件信息。文件组织,因此也要提供此类文件信息。v 文件的位置和大小。文件的位

    11、置和大小。v 在共享系统中,提供用户对文件的存取控制。在共享系统中,提供用户对文件的存取控制。v 文件和记录文件历史的信息。文件和记录文件历史的信息。11(1)基本信息基本信息 文件名:文件名:在一个特定的目录中具有唯一性。在一个特定的目录中具有唯一性。文件类型:文件类型:例如文本文件,二进制文件,目标模块等。例如文本文件,二进制文件,目标模块等。文件组织:文件组织:系统所支持的不同组织形式。系统所支持的不同组织形式。(2)地址信息地址信息 起始地址:起始地址:文件存放在外存的起始物理地址(例如:文件存放在外存的起始物理地址(例如:柱面号、磁道号或在磁盘上的块号)。柱面号、磁道号或在磁盘上的块

    12、号)。已使用大小:已使用大小:当前文件的大小,以字节、字或块计。当前文件的大小,以字节、字或块计。(3)存取控制信息存取控制信息 文件主:文件主:拥有文件的控制权。文件主能授予和取消其拥有文件的控制权。文件主能授予和取消其他用户对文件的存取权和改变这些权限。他用户对文件的存取权和改变这些权限。允许的操作:允许的操作:控制读、写、执行和在网上的传输等。控制读、写、执行和在网上的传输等。(4)使用信息使用信息 创建日期:创建日期:文件首次存放在目录中的时间。文件首次存放在目录中的时间。读时间:读时间:最后一次读文件记录的时间。最后一次读文件记录的时间。修改时间:修改时间:最后一次更新、插入或删除记

    13、录的时间。最后一次更新、插入或删除记录的时间。126.2.2 目录的结构目录的结构对目录操作的类型:对目录操作的类型:搜索:搜索:搜索目录以找到对应于文件的目录项。搜索目录以找到对应于文件的目录项。创建文件:创建文件:将目录项加到目录中。将目录项加到目录中。删除文件:删除文件:从目录中移去一个目录项。从目录中移去一个目录项。列目录:列目录:可以要求列出全部或部分目录内容。可以要求列出全部或部分目录内容。使用两级目录。在这种情况下,系统有一个主使用两级目录。在这种情况下,系统有一个主目录,并为每一个用户设置一个目录。目录,并为每一个用户设置一个目录。层次结构或称树型结构。系统中有一个主目层次结构

    14、或称树型结构。系统中有一个主目录,在它之下有一些用户目录,每一个用户目录录,在它之下有一些用户目录,每一个用户目录也同样允许有子目录和文件。也同样允许有子目录和文件。136.3 文件存储资源分配文件存储资源分配(1)预分配和动态分配预分配和动态分配 预分配的策略需要在创建文件时说明文件的最预分配的策略需要在创建文件时说明文件的最大长度。对于很多的应用,要可靠地估计文件的大长度。对于很多的应用,要可靠地估计文件的长度如果不是不可能的,也是很困难的。用户和长度如果不是不可能的,也是很困难的。用户和应用程序只能倾向于过高估计文件的长度以便不应用程序只能倾向于过高估计文件的长度以便不会用完分配给文件的

    15、空间。会用完分配给文件的空间。从存储分配的角度看,这明显是浪费的。相反,从存储分配的角度看,这明显是浪费的。相反,动态分配不存在这个缺点,这种方法在需要时才动态分配不存在这个缺点,这种方法在需要时才给文件分配空间。给文件分配空间。14(2)分区大小)分区大小 1)连续的空间提高了操作性能。连续的空间提高了操作性能。2)具有大量的小分区增加了管理存储分配信具有大量的小分区增加了管理存储分配信息表的大小。息表的大小。3)具有固定大小的分区(如,以块为单位)具有固定大小的分区(如,以块为单位)可简化存储空间的算法。可简化存储空间的算法。4)具有可变大小或固定的小尺寸的分区可以具有可变大小或固定的小尺

    16、寸的分区可以减少存储空间的浪费。减少存储空间的浪费。15两个主要的选择方案两个主要的选择方案可变长度、连续的大分区:可变长度、连续的大分区:性能较好。可变性能较好。可变长度避免浪费存储空间,文件分配表也较小。长度避免浪费存储空间,文件分配表也较小。块:块:小而固定长度的分区,灵活性大。但存小而固定长度的分区,灵活性大。但存储分配需要较大的表或复杂的结构。存储块即需储分配需要较大的表或复杂的结构。存储块即需即分配,但块间就不一定相邻。即分配,但块间就不一定相邻。可变长度分区需要考虑空闲区的碎片问题。可变长度分区需要考虑空闲区的碎片问题。首次适应法:首次适应法:选择第一个足够大小的连续空选择第一个

    17、足够大小的连续空闲块组。闲块组。最佳适应法:最佳适应法:在所有满足大小要求的空闲块在所有满足大小要求的空闲块组中选择最小的一组。组中选择最小的一组。循环首次适应法:循环首次适应法:选择离该文件的前次分配选择离该文件的前次分配物理位置最近的满足大小要求的空闲块组。物理位置最近的满足大小要求的空闲块组。16(4)空闲存储空间管理)空闲存储空间管理位表位表这种方法是每一二进制位对应一个磁盘块。二进制位为这种方法是每一二进制位对应一个磁盘块。二进制位为0表示一个空闲块,位值为表示一个空闲块,位值为1表示该块已被使用。位表所具表示该块已被使用。位表所具有的优点是查找一个或一组连续的空闲块比较方便。位表有

    18、的优点是查找一个或一组连续的空闲块比较方便。位表已是尽可能地小,因此可以全部放入主存中。已是尽可能地小,因此可以全部放入主存中。.空闲分区链空闲分区链 空闲分区可以用指针连在一起,还需要一个空闲分区的空闲分区可以用指针连在一起,还需要一个空闲分区的长度信息。长度信息。索引索引 索引方法将空闲存储区当作文件一样处理,像文件分配索引方法将空闲存储区当作文件一样处理,像文件分配那样使用索引表。在索引表上的每一项对应磁盘上的每一那样使用索引表。在索引表上的每一项对应磁盘上的每一个空闲分区。个空闲分区。176.4 文件的系统调用文件的系统调用6.4.1 文件的创建、打开、关闭和取消文件的创建、打开、关闭

    19、和取消1.文件的创建文件的创建 fd=creat(pathname,mode);int fd,mode;char *pathname;pathname是要创建文件的带路径的文件名。是要创建文件的带路径的文件名。mode是以二进制的位值为该文件设置的存取控制权限。是以二进制的位值为该文件设置的存取控制权限。其低其低9位以位以3位为一组,由高至低位分别表示文件主,文件主位为一组,由高至低位分别表示文件主,文件主同组用户和其他用户对该文件是否拥有读、写、执行权限。同组用户和其他用户对该文件是否拥有读、写、执行权限。mode中还可设置如下控制位:中还可设置如下控制位:01000文件使用后仍保留在盘交换

    20、区上。文件使用后仍保留在盘交换区上。04000用户执行本文件时将其有效用户标识数用户执行本文件时将其有效用户标识数u_uid设置为设置为文件主标识数,该特性一般为超级用户所使用。文件主标识数,该特性一般为超级用户所使用。第第1215位为文件类型位。位为文件类型位。fd中存放文件创建成功后系统返回的整数值,称为打开文中存放文件创建成功后系统返回的整数值,称为打开文件标识数(或称描述字)。件标识数(或称描述字)。182.文件的打开文件的打开 fd=open(pathname,flags);int fd,flags;char*pathname;pathname和和fd的意义同的意义同creat调用中

    21、同名变量。调用中同名变量。flags表示本次打开后要对文件进行的操作,可取的值表示本次打开后要对文件进行的操作,可取的值及意义列举如下:及意义列举如下:O_RDONLY(0)对文件进行读操作对文件进行读操作 O_WRONLY(1)对文件进行写操作。对文件进行写操作。O_RDWR (2)对文件既可以读也可以写。对文件既可以读也可以写。O_NDELAY(4)打开管道文件时是否要等待。)打开管道文件时是否要等待。O_APPEND(8)对文件进行添加写操作。对文件进行添加写操作。要使用以上常数,应包含要使用以上常数,应包含fcntl.h文件。文件。应该遵循最小存取权原理。应该遵循最小存取权原理。193

    22、.文件的关闭文件的关闭4.文件的联接、解除联接和删除文件的联接、解除联接和删除 close(fd););为名为为名为name1的文件再起一个新的名,可使用系的文件再起一个新的名,可使用系统调用:统调用:link(name1,name2););要取消某文件的一个文件名,则可用系统调用:要取消某文件的一个文件名,则可用系统调用:unlink(pathname););利用利用link和和unlink调用可以改变文件的名:调用可以改变文件的名:link(name1,name2););unlink(name1););相当于相当于UNIX命令:命令:mv name1 name2 unlink调用仅仅使其联

    23、接数减去调用仅仅使其联接数减去1。当文件仅剩。当文件仅剩下一个名时,下一个名时,unlink调用取消这一文件名后再将该调用取消这一文件名后再将该文件从系统中删去。文件从系统中删去。206.4.2文件的读写文件的读写 n=read(fd,buf,nbytes););n=write(fd,buf,nbytes););int fd,n;unsigned nbyte;char*buf;fd为先前已打开文件的描述字,为先前已打开文件的描述字,nbyte是欲读、写的字节数。是欲读、写的字节数。n 对于读,对于读,buf是读出的文件信息应送至的目标区始址;是读出的文件信息应送至的目标区始址;对于写,对于写,

    24、buf是要写入文件的信息源区首址。是要写入文件的信息源区首址。n n是调用返回值,表示实际读出和或实际写入的字节数。是调用返回值,表示实际读出和或实际写入的字节数。n的值可能不等于的值可能不等于nbytes的值。如不相等,对于读,的值。如不相等,对于读,0nnbytes时,表示已读到了文件尾,时,表示已读到了文件尾,n=-1时,表示读操作时,表示读操作出错。对于写,出错。对于写,nnbyte或或n=-1时都表示写出错。时都表示写出错。21三个特殊的文件三个特殊的文件 一般在进程创建后就已处于打开的状态,它一般在进程创建后就已处于打开的状态,它们是:们是:0号号 标准读文件代表键盘输入标准读文件

    25、代表键盘输入 1号号 标准写文件代表屏幕显示标准写文件代表屏幕显示 2号号 标准错误输出文件,是程序的运行时的出标准错误输出文件,是程序的运行时的出错信息,也写至屏幕上,但在错信息,也写至屏幕上,但在shell命令中不能命令中不能直接用直接用I/O转向符转向符“”将标准错误输出转向至将标准错误输出转向至一个文件。一个文件。22#define BUFSIZE 1024main()char buf BUFSIZE;int n;while(n=read(0,buf,BUFSIZE)0)write(1,buf,n);UNIX的文件读写是通过缓存进行,而缓存的大小为的文件读写是通过缓存进行,而缓存的大小

    26、为1024(或它的倍数),故一次读写的字节数以(或它的倍数),故一次读写的字节数以BUFSIZE为宜。为宜。下面是一个将标准输入文件复制到标准输出文件的下面是一个将标准输入文件复制到标准输出文件的程序,执行该程序的效果相当于不带任何参数的程序,执行该程序的效果相当于不带任何参数的cat命令。命令。236.4.3 调整文件读写位置调整文件读写位置lseek read和和write系统调用提供了文件顺序读、写功能,但系统调用提供了文件顺序读、写功能,但如要从文件中的指定位置起读或写,就要使用改变文件读写如要从文件中的指定位置起读或写,就要使用改变文件读写指针的系统调用指针的系统调用lseek,其调

    27、用格式为:其调用格式为:lseek(fd,offset,whence);int fd,whence;long offset;offset和和whence配合起来决定调整到文件中的一个新位配合起来决定调整到文件中的一个新位置。置。offset为字节偏移值,为字节偏移值,whence为参考点。为参考点。whence取取值及意义如下所列:值及意义如下所列:0:读写位置的参考点为文件的起始位置。读写位置的参考点为文件的起始位置。1:读写位置的参考点为当前的读、写位置。读写位置的参考点为当前的读、写位置。2:读写位置的参考点为文件尾。读写位置的参考点为文件尾。分别表达绝对位置、当前相对位置和文件尾相对位

    28、置分别表达绝对位置、当前相对位置和文件尾相对位置。246.4.4 创建任何类型文件创建任何类型文件mknod 目录、有名管道和特别文件只能用目录、有名管道和特别文件只能用mknod创建:创建:#include#include int mknod(pathname,mode,device);char*pathname;/*文件名文件名*/int mode,device;/*文件的属性和权限模式,文件的属性和权限模式,设备号设备号*/n 在创建文件、目录和有名管道时,参数在创建文件、目录和有名管道时,参数devicedevice被被忽略,但在创建特别文件时要提供设备号参数。忽略,但在创建特别文件时

    29、要提供设备号参数。n 普通用户可以用普通用户可以用mknodmknod创建一个有名管道,但只创建一个有名管道,但只有超级用户可以用有超级用户可以用mknodmknod创建文件、目录和特别文件。创建文件、目录和特别文件。对于普通用户,对于普通用户,mkdirmkdir只有只有shellshell命令,没有系统调命令,没有系统调用用(Linux(Linux有)。有)。25 6.4.5 6.4.5 其他的文件系统调用其他的文件系统调用 1.1.改变文件的权限改变文件的权限chmodchmod 本调用功能是改变一个文件或目录的许可权,调用格式为本调用功能是改变一个文件或目录的许可权,调用格式为 chm

    30、odchmod(pathname,mode)(pathname,mode);char char*pathnamepathname;int modeint mode;modemode的二进制位定义同的二进制位定义同creatcreat系统调用。系统调用。2.2.复制文件描述字复制文件描述字dupdup 本调用为一个已打开的文件再分配一个新的文件描述本调用为一个已打开的文件再分配一个新的文件描述字,使多个文件描述字可与同一个文件相联系,在构造字,使多个文件描述字可与同一个文件相联系,在构造shell的管道线时这个调用很重要。调用格式为的管道线时这个调用很重要。调用格式为 newfd=dup(fd)

    31、;int fd,newfd;执行本调用时,核心为已打开的文件执行本调用时,核心为已打开的文件fd再分配一个在打再分配一个在打 开文件表中最小可用的文件描述字,并返回给执行进程。开文件表中最小可用的文件描述字,并返回给执行进程。264.4.查询文件的状态查询文件的状态statstat与与fstatfstat 本调用功能使返回文件的类型、大小、所有者、存取权本调用功能使返回文件的类型、大小、所有者、存取权限,联接数等信息。这些信息是从文件的索引节点中读出限,联接数等信息。这些信息是从文件的索引节点中读出来的。调用格式有两种:来的。调用格式有两种:stat(pathname,buf);fstat(f

    32、d,buf);char*pathname;struct stat*buf;int fd;在上面两个系统调用中,前一个调用所指文件是在上面两个系统调用中,前一个调用所指文件是以以UNIX的路径名形式给出,因此能返回文件系统中存在的的路径名形式给出,因此能返回文件系统中存在的文件状态,后一个调用是以文件描述字的形式给出,故只文件状态,后一个调用是以文件描述字的形式给出,故只能用于已打开的文件。后一种调用执行的速度要比前一种能用于已打开的文件。后一种调用执行的速度要比前一种快。返回的文件状态存放在快。返回的文件状态存放在stat类型的结构中。类型的结构中。275.5.文件控制文件控制fcntlfcn

    33、tl 对已打开的文件进行控制对已打开的文件进行控制 fcntl(fd,cmd,arg);int fd,cmd,arg;cmd为对文件的控制模式,主要的取值及意义有:为对文件的控制模式,主要的取值及意义有:F_DUPFD:返回大于或等于返回大于或等于arg变量所给出描述字的变量所给出描述字的新的描述字。本功能类似于新的描述字。本功能类似于dup系统调用。系统调用。F_GETFL:获取获取fd所对应文件的状态信息,这个信息所对应文件的状态信息,这个信息对应于对应于open系统调用的系统调用的flags。F_SETFL:将将fd所对应文件的状态设置成所对应文件的状态设置成arg参数的参数的值。但不能

    34、改变值。但不能改变O_RDONLY、O_WRONLY和和O_RDWR标志,只能设置标志,只能设置O_NDELAY和和O_APPEND。28例:设置打开文件的例:设置打开文件的O_APPEND标志标志 为了不影响其他任何标志,先要获取文件状态,再为了不影响其他任何标志,先要获取文件状态,再写回。写回。#include int set append(fd)int fd;int flag;flags=fcntl(fd,F_GETFL,0);return(fcntl(fd,F_SETFL,flags|O_APPEND);297.设置文件权限屏蔽字设置文件权限屏蔽字 umask调用可以设置或改变进程所创

    35、建文件的调用可以设置或改变进程所创建文件的屏蔽字。例如:屏蔽字。例如:umask(002););fd=creat(”tempf”,0666););n 尽管尽管creat所创建的所创建的tempf文件对所有的用户都文件对所有的用户都是可读可写的,但由于先调用了是可读可写的,但由于先调用了umask(002),),使文件主和与文件主同组用户以外的其他用户的写使文件主和与文件主同组用户以外的其他用户的写权限被清除了。权限被清除了。n 用用umask设置的屏蔽字不影响设置的屏蔽字不影响chmod系统调系统调用,故用用,故用chmod可以将文件权限置成任何期望的可以将文件权限置成任何期望的值。值。306

    36、.5 文件的标准子例程文件的标准子例程标准标准I/O的概念的概念v 文件基本操作的系统调用提供的只是字节序文件基本操作的系统调用提供的只是字节序列方式的最基本的功能,不能完成任何格式转化列方式的最基本的功能,不能完成任何格式转化。为了提供功能更强和使用更方便的输入和输出。为了提供功能更强和使用更方便的输入和输出操作,操作,UNIX系统提供了标准系统提供了标准I/O库。例如库。例如 scanf、printf、getchar和和putchar等。等。v 标准标准I/O库主要通过用户态空间的自动缓冲库主要通过用户态空间的自动缓冲机构以及数据类型转化和格式化的输入输出,提机构以及数据类型转化和格式化的

    37、输入输出,提供了效率高、功能强和可移植的文件访问或字符供了效率高、功能强和可移植的文件访问或字符串处理功能。串处理功能。v 在在UNIX的标准的标准I/O库中,通过一个库中,通过一个FILE类类型结构建立与打开文件的联系,称为型结构建立与打开文件的联系,称为流流(stream)31在头文件在头文件stdio.h中定义的中定义的FILE结构结构typedef struct _iobuf unsigned char*_ptr;缓冲区内下一字符地址缓冲区内下一字符地址 int _cnt;缓冲区中缓冲区中_ptr所指位置后剩余字符数所指位置后剩余字符数 unsigned char *_base;缓冲区

    38、起始地址缓冲区起始地址 char _flag;存取方式,如读或存取方式,如读或/和写和写 char _file;文件描述字文件描述字 FILE;n file用于存放打开文件的描述字用于存放打开文件的描述字n 输出的字节数据逐个放入缓冲区中,并相应地调整输出的字节数据逐个放入缓冲区中,并相应地调整_ptr和和_cnt之值。如果缓冲区存满了,例行程序再通过系统调用之值。如果缓冲区存满了,例行程序再通过系统调用write把缓冲区内容写入把缓冲区内容写入_file指示的文件中。指示的文件中。n 输入例行程序从缓冲区中读数据,当缓冲区空了时,就输入例行程序从缓冲区中读数据,当缓冲区空了时,就通过系统调用

    39、通过系统调用read从文件中再读入一个缓冲区的数据。从文件中再读入一个缓冲区的数据。32struct _iobuf buffer _base _ptr _cnt _flag-flags _file-fd331 流文件的打开和关闭流文件的打开和关闭(1)流文件的打开流文件的打开 include FILE*fp;fp=fopen(pathname,type);char*pathname,*type;如果打开成功,把它与一个流联系起来,并返回标识该如果打开成功,把它与一个流联系起来,并返回标识该流的流的FILE结构的指针。如结构的指针。如fopen失败,返回失败,返回NULL。参数参数type可取下

    40、列的基本值:可取下列的基本值:r 打开文件用于只读打开文件用于只读。w 建立文件或把已存在文件截为空文件,用于只写。建立文件或把已存在文件截为空文件,用于只写。a 打开文件用于文件尾的追加写。打开文件用于文件尾的追加写。在上述参数后各加上一个在上述参数后各加上一个”+”,表示修改模式,即可,表示修改模式,即可读可写,但这种模式有较多限制,特别是在写操作后不能读可写,但这种模式有较多限制,特别是在写操作后不能立即进行读操作,除非中间插入了后面介绍的立即进行读操作,除非中间插入了后面介绍的fseek和和rewind两个调整流文件读写指针的操作。两个调整流文件读写指针的操作。34 用用fopen建立

    41、的一个文件以默认值建立的一个文件以默认值0666作为其作为其控制权限,这使所有的用户都能读写该文件。控制权限,这使所有的用户都能读写该文件。如果要以其他值作为控制权限,则可以先用系如果要以其他值作为控制权限,则可以先用系统调用统调用umask改变进程的权限屏蔽字。改变进程的权限屏蔽字。与与0#,1#,2#三个标准的打开文件描述字相三个标准的打开文件描述字相联系,标准联系,标准I/O库提供了三个不需要打开的流库提供了三个不需要打开的流,并用下列的,并用下列的FILE指针标识:指针标识:stdin标准输入流标准输入流 stdout标准输出流标准输出流 stderr错误输出流错误输出流35(2)流文

    42、件的关闭流文件的关闭 fclose(fp););该命令刷新与文件相关的缓冲区,关闭该命令刷新与文件相关的缓冲区,关闭已打开的文件并释放已打开的文件并释放FILE结构。如果不显结构。如果不显式执行该命令,进程运行结束后关闭所有式执行该命令,进程运行结束后关闭所有打开的流文件。打开的流文件。363 流文件的读写流文件的读写 n=fread(buf,size,nitems,fp););n=fwrite(buf,size,nitems,fp););int n,size,nitems;char*buf;FILE*fp;n fread从从fp指定的输入流文件中将指定的输入流文件中将nitems个大小为个大

    43、小为size的数据对象读入的数据对象读入buf所指向的存储区中,返回值所指向的存储区中,返回值n给给出了成功读出的数据对象个数。出了成功读出的数据对象个数。n fwrite将将nitems个大小为个大小为size的数据对象从的数据对象从buf所指所指的存储区写到的存储区写到fp所指定的输出流文件中。返回值所指定的输出流文件中。返回值n给出给出了实际写入的数据对象个数。了实际写入的数据对象个数。n 实际使用时,数据对象的大小实际使用时,数据对象的大小size往往用往往用sizeof(struct struct_name)函数代替。这两个流操作可函数代替。这两个流操作可以在二进制文件和以在二进制文

    44、件和buf之间传送任何数据结构的内容,之间传送任何数据结构的内容,返回值返回值nnitems 的情况与系统调用的情况与系统调用read和和write相似。相似。37下面比较一下循环执行每次写一个字节的系统调用下面比较一下循环执行每次写一个字节的系统调用 write(fd,buf,1)与每次写一个字节的流文件操作与每次写一个字节的流文件操作 fwrite(buf,1,1,fp)两者的执行效率,假定块设备的系统缓冲区大小和流文件两者的执行效率,假定块设备的系统缓冲区大小和流文件的用户态空间缓冲区大小都是的用户态空间缓冲区大小都是1024字节。字节。循环执行系统调用循环执行系统调用write(fd,

    45、buf,1)时,每次调用向文件输时,每次调用向文件输出一个字节,但由于块设备读写是通过系统缓冲区进行的,出一个字节,但由于块设备读写是通过系统缓冲区进行的,故故1024次写调用才需要一次实际设备次写调用才需要一次实际设备I/O操作,但需要操作,但需要1024次从用户态转换到核心态和从核心态转回用户态的开销。次从用户态转换到核心态和从核心态转回用户态的开销。循环执行流文件操作循环执行流文件操作fwrite(buf,1,1,fp)时,每次操作向时,每次操作向用户态空间的流文件缓冲区写入一个字节,用户态空间的流文件缓冲区写入一个字节,1024次写操作填次写操作填满该缓冲区后才发出一次满该缓冲区后才发

    46、出一次write系统调用,转换到核心态,并系统调用,转换到核心态,并进行一次实际的设备进行一次实际的设备I/O操作。操作。因此两种方法的设备因此两种方法的设备I/O时间花费是一样的,主要差别是时间花费是一样的,主要差别是流文件操作用流文件操作用1024次用户态函数的调用和返回的开销代替了次用户态函数的调用和返回的开销代替了直接使用系统调用时直接使用系统调用时1024次用户态与核心态之间的切换。次用户态与核心态之间的切换。38 在实际系统中,一次函数调用所费的时间比在实际系统中,一次函数调用所费的时间比用户态与核心态之间的切换所费的时间少得多用户态与核心态之间的切换所费的时间少得多,故当不是以整

    47、块的方法输入或输出数据时,故当不是以整块的方法输入或输出数据时,使用流文件操作比使用系统调用效率高很多。使用流文件操作比使用系统调用效率高很多。图图6-3描述了流文件操作与系统调用之间的描述了流文件操作与系统调用之间的关系。关系。值得注意的是值得注意的是fread与与fwrite这种二进制数据这种二进制数据的读写方法与具体机器的数据内部存储方法(的读写方法与具体机器的数据内部存储方法(如一个字的高、低位字节次序)有关,所以在如一个字的高、低位字节次序)有关,所以在一台机器上写入的数据,在另一台机器可能读一台机器上写入的数据,在另一台机器可能读不出来,或读出的数据与原先写入的不同。要不出来,或读

    48、出的数据与原先写入的不同。要避免这类问题,就要用后面介绍的格式输入和避免这类问题,就要用后面介绍的格式输入和输出操作。输出操作。39图图6-3流文件操作与系统调用间的关系流文件操作与系统调用间的关系用户态与核心态切换用户程序标准I/O库核心程序流文件操作用户态空间核心态空间块设备读写块设备驱动系统调用用户程序fread()fwrite()文件卷用户态缓冲区read()write()核心态缓冲区403 调整和获取流文件的读写位置调整和获取流文件的读写位置fseek(fp,offset,whence);rewind(fp);position=ftell(fp);FILE*fp;long offse

    49、t,position;int whence;fseek的第二、三个参数的意义与设置方法与系统调用的第二、三个参数的意义与设置方法与系统调用seek一样。一样。rewind例行程序将文件读写位置指针调整到文件首。例行程序将文件读写位置指针调整到文件首。这相当于执行前一个例行程序:这相当于执行前一个例行程序:fseek(fp,0L,0)。ftell返回流中的当前位置。返回流中的当前位置。414 格式输入与输出格式输入与输出除前面介绍的不经格式转化的二进制数据输入除前面介绍的不经格式转化的二进制数据输入输出外,标准输出外,标准I/O库还提供了能进行格式转化的库还提供了能进行格式转化的I/O例行程序。

    50、例行程序。用户可以直接观察存储在文件中或显示在屏幕用户可以直接观察存储在文件中或显示在屏幕上的数据,而且这类操作是与机器特征无关的。上的数据,而且这类操作是与机器特征无关的。如果用户要从键盘上输入数据,那么带格式转化如果用户要从键盘上输入数据,那么带格式转化的输入一般是唯一的方法。的输入一般是唯一的方法。fscanf(fp,format,arg1,arg2,argn);fprintf(fp,format,arg1,arg2,argn);FILE*fp;char*format;42如果要从标准输入中读入,或将数据写至标准输如果要从标准输入中读入,或将数据写至标准输出上,则可写成:出上,则可写成:

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:文件系统[页]课件.ppt
    链接地址:https://www.163wenku.com/p-4702093.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库