vWorks文件系统介绍.docx

上传人:碎****木 文档编号:94960833 上传时间:2023-08-13 格式:DOCX 页数:9 大小:33.86KB
返回 下载 相关 举报
vWorks文件系统介绍.docx_第1页
第1页 / 共9页
vWorks文件系统介绍.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《vWorks文件系统介绍.docx》由会员分享,可在线阅读,更多相关《vWorks文件系统介绍.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.VxWorks 为块设备磁盘的实时使用供给了两种本地文件系统:一种与MS-DOS 文件系统相兼容,另一种与RT-11 文件系统相兼容。这些文件系统的支持库分别为dosFsLib 和 rt11FsLib。VxWorks 还供给了一种简洁的 raw 文件系统,这个文件系统把整个磁盘作为一个单独的大文件。这个文件系统的支持库是rawFsLib。VxWorks 还为不使用标准文件或名目构造的磁带设备供给了一个文件系统。磁带卷被看作一个 raw 设备,整个卷就是一个大文件。这个文件系统的支持库是 tapeFsLib。另外,VxWorks 供给了一个文件系统支持库cdromFsLib,它允许应用程序从依

2、照ISO9660 标准文件系统格式化的CD-ROMs 中读取数据。在 VxWorks 中,文件系统不受块设备种类型或它的驱动程序的约束。VxWorks 块设备都使用一个标准接口,以便文件系统可以与设备驱动程序自由的混合。做为选择,你可以写自己的能被驱动程序以一样方式使用的文件系统,只要在文件系 统、驱动程序和 I/O 系统间遵循同样的标准接口。VxWorks 的 I/O 体系构造使得在一个VxWorks 系统中可以有多样的文件系统,甚至其类型也可以不同。块设备界面在3.9.4 块设备中争论。1 与 MS-DOS 兼容的文件系统:dosFs使用 dosFs 文件系统格式化的磁盘与MS-DOS直至

3、 6.2 版本磁盘是相兼容的。由两个文件系统初始化的硬盘之间在格式上有微小区分。然而,数据自身是兼容的,而且dosFs 可被配置成使用MS-DOS 格式化的磁盘。DosFs 文件系统向不同要求的实时应用程序供给了良好的适应性。主要特点包括: l 文件和名目分等级排序,允许有效地组织,在一卷上可以创立任意数量的文件。l 每个文件可以是连续存储或非连续存储的。非连续存储的文件可使硬盘空间利用率更高,连续存储的文件可以增加系统性能。l 具有与广泛可用的存储器和可恢复介质的兼容性。应用VxWorks不使用dosFs 文件扩展名、MS-DOS PCs 和其它系统创立的磁盘可以自由的交换。假设分区表被说明

4、,那么硬盘也是兼容的。l 具有从有dosFs 文件系统的本地SCSI 设备引导VxWorks 的力量。l 可以使用比通常MS-DOS 允许的 8 个字符的文件名加 3 个字符的扩展名更长的文件名。l NFS网络文件系统的支持。1.1 磁盘组织MSDOS/ dosFs 文件系统供给了一种以敏捷方式组织磁盘数据的方法。它维护指定名目、每个包含文件或其它的名目的等级设置。文件可以被设置其搜寻路径;文件扩展时,的磁盘空间被自动安排。安排给一个文件的磁盘空间不必肯定是 连续的,这样可以使磁盘空间铺张最小。然而,为了提高它的实时性,dosFs 文件系统允许连续空间被预先个别地安排给文件,从而使查找操作最块

5、,行为更加确定。MS-DOS/dosFs 文件系统的通常组织构造如图 1,其中的多个单元在下面的局部论述。图 1 MS-DOS 磁盘组织引导扇区 扇区 0文件安排表FAT)根名目文件和子名目簇在 MS-DOS/dosFs 文件系统中,安排给文件的磁盘空间由一个或多个磁盘簇组成。一个簇为一组连续的磁盘扇区 。软盘通常由两个扇区组成一簇;固定硬盘由更多的扇区组成一簇。文件系统可以一次安排的最小的磁盘空间为一簇。虽然每 簇有巨大数量的扇区允许在固定大小的文件安排表 FAT;见 文件安排表中描述一个巨大的磁盘,但是这可能会导致磁盘空间的铺张。引导扇区.MS-DOS/dosFs 硬盘或磁盘的第一个扇区称

6、为引导扇区。其中包含有多种配置数据。其中一些数据域描述硬盘的物理性质例如总扇区数,另外一些域描述文件系统变量例如根名目的大小。引导扇区信息在初始化时写入磁盘。dosFs 文件系统可以使用在另一个系统上初始化过的磁盘例如,在MS-DOS PC 上使用 FORMAT,或者 VxWorks 可以使用ioctl调用中的FIODISKINIT 函数初始化磁盘。随着 MS-DOS 标准的进展,多样的域被参加到引导扇区的定义中。VxWorks 下的磁盘初始化使用 MS-DOS 5.0 版本定义的引导扇区域。MS-DOS 初始化硬盘时,在引导扇区中参加一个分区表。而VxWorks 不创立这样一个表。所以两个系

7、统初始化的硬盘是不同的。假设设备的块补偿参数创立程序将超出分区表范围的数据指向数据区的第一个字节,那么 VxWorks 可以读取被MS-DOS 格式化的磁盘文件。文件安排表每个 MS-DOS/dosFs 卷包含一个文件安排表FAT。对每一个安排给文件或名目的磁盘上的簇,FAT 中都有一个条目。当簇没有使用过时可安排,它的条目值为零。假设簇安排给一个文件,它的条目值是文件下一局部的簇号。假设簇位于文件的最终,它的条目值是-1。所以,文件或名目的表述由一个FAT 条目链表组成。如 2 例所示,一个文件由簇 2、300 和 500 组成。簇 3 是没有使用过。留意:dosFs 不映射坏的磁盘扇区到F

8、AT 中图 2:FAT 条目此主题相关图片如下:FAT 的每个条目占 12 或 16 位。最多包含4085 簇的磁盘卷用 12 位条目;多于4085 簇的磁盘用 16 位条目。条目特别是12 位条目最初利用英特尔8088 体系配置的优点,编码为特别形式。然而,由于全部的 FAT 操作都通过dosFs 文件系统执行;所以编码和译码与 VxWorks 应用程序无关。一个卷通常包括多个FAT 拷贝。这种冗余允许数据在第一份FAT 中发生介质错误大事时得到恢复。警告:假设是指定配置,dosFs 文件系统维护多个FAT 拷贝;然而,在错误大事中,拷贝不是自动使用的。FAT 的大小和 FAT 拷贝的数量是

9、由引导扇区中的域打算的。对于使用 dosFs 文件系统初始化的磁盘,这些参数是在dosFsDevInit( )调用通过设置卷配置构造DOS_VOL_CONFIG 中域期间被指定的。根名目每个 MS-DOS/dosFs 卷包含一个根名目。根名目总是占有紧接着FAT 拷贝的一组连续的磁盘扇区。根名目占据的磁盘区域不在 FAT 中被条目描述。根名目的大小是固定的,它的大小被引导扇区中的一个域指定,作为允许的名目项的最大数值。对于使用dosFs 文件系统初始化的磁盘,这个大小是在dosFsDevInit( )调用通过设置卷配置构造DOS_VOL_CONFIG 中域期间被指定的。由于根名目有一个固定的大

10、小,所以名目为满时再向其中参加项将返回一个错误。子名目除了根名目外,MS-DOS/dosFs 卷有时包含一个子名目层。和根名目一样,子名目也包含文件和其它子名目项; 不过,在有些方面它们不同与根名目,而是类似于文件。l 第一、象文件一样,每个子名目都被另一个名目中的项描述。这样的一个名目项通过在文件属性字节中一个位设置来说明它描述了一个子名目。同时,子名目与根名目不同,它有用户指定名。l 其次、安排给子名目的磁盘空间由 FAT 条目连接而成的一组磁盘组成。这意味着子名目可以随着条目的参加而增大, 并且子名目不肯定要由连续的簇组成。根名目与子名目不同,能由任意数量的扇区组成,并且不必等于簇的整数

11、倍数。 l 第三,子名目通常包含两个专用的项。“.”项指向子名目本身,“.”项指向子名目的父名目。而根名目不包含这些专用项。文件在 MO-DOS/dosFs 文件系统中安排给文件的磁盘空间是由FAT 中的条目链在一起的一组簇。一个文件不肯定由连续的簇组成;可以以任意挨次安排磁盘任意位置的不同的簇。每个文件在其名目中有一个描述项。这个项包含文件名、大小、最终一次修改的时间和日期,还有文件的几个重要属性只读文件,系统文件,隐蔽文件,存档文件。这个条目也包含文件的起始簇数;剩下的簇用FAT 定位。卷标一个 MS-DOS/dosFs 磁盘可以有一个相关的卷标。卷标在根名目中是一个特别项。它不包含文件名

12、和子名目,而是包含一个识别卷的字符串。这个字符串可以包含最多 11 个字符。卷标项是通过在名目项中的一个特别的文件属性字节的值来识别的。留意虽然卷标条目没有用ls报告出来。不过它占了根名目固定数目的条目中的一个。卷标可以通过使用带有FIOLABELSET 函数参数的ioctl调用参加到dosFs 卷。假设卷标不存在,就在卷的根名目加一个卷标项,否则,转变卷标字符串的值。这个卷标条目占据一个固定的根名目条目数;当根名目满时增加一个条目将导 致一个错误。当前的卷标字符串可以通过调用带有FIOLABELGET 函数参数的ioctl来获得。假设没有卷标,这个调用将返回一个错误,并设置errno 为 S

13、_dosFsLib_NO_LABEL。在 VxWork 或 MS-DOS5.0或更高版本下初始化的磁盘,其引导扇区也包含卷标字符串。1.2 初始化dosFs 文件系统留意在任何其它操作能被执行之前,dosFs 文件系统库dosFsLib必需通过dosFsInit调用进展初始化。这个程序带有一个参数可以在同一时间翻开的 dosFs 文件描述符的最大数。文件描述符的数目是在初始化时被安排,而且应用程序翻开一个文件、名目或文件系统设备时,就使用了一个文件描述符。dosFsInit程序在I/O 系统驱动器表中也为文件系统创立了一个条目用isoDrvInstall。这个条目为 dosFs 文件操作指定条

14、目指针,并且可以用于dosFs 文件系统中全部的设备。安排给dosFs 文件系统的驱动器数记录在全局变量dosFsDrvNum 中。DosFsInit通常在VxWorks 系统启动之后被usrRoot任务调用。使用这种初始化,在工程工具VxWorks view 中选择 INCLUDE_DOSFS,在Params 属性标记中设置NUM_DOSFS_FILES 为想翻开文件的最大数。1.3 使用dosFs 初始化设备dosFs 文件系统初始化后,下一步是创立一个或更多的设备。设备通过设备驱动器的设备创立程序xxDevCreate来创立。驱动程序向块设备描述符构造BLK_DEV返回一个指针。BLK_

15、DEV 构造描述了设备的物理形式,同时也指定设备驱动程序供给应文件系统的程序。更多块设备的信息参见3.9.4 块设备。设备刚创立之后,块设备没有与其相关联的名字和文件系统。为了初始化一个块设备用于dosFs 文件系统,已经创立好的块设备必需与dosFs 相关联,并指派一个名字。这由dosFsDevInit完成。它的参数有:用来标识设备的名字、块设备描述符构造和卷配置构造DOS_VOL_CONFIG见 4.2.4 卷构造。例子:DOS_VOL_DESC *pVolDesc; DOS_VOL_CONFIG configStruct;pVolDesc = dosFsDevInit (“DEV1:“,

16、 pBlkDev, &configStruct); dosFsDevInit调用执行以下任务:l 为设备命名,把设备参加I/O 系统设备表用iosDevAdd。 l 为设备安排并初始化文件系统卷描述符l 返回指向卷描述符的一个指针。这个指针用来在一些文件系统调用时识别磁卷用 dosFs 初始化设备并不格式化磁盘,也不用 MS_DOS 构造根名目,FAT,等等初始化磁盘。可以在有数据存在于 MS_DOS 文件系统中的磁盘上使用dosFsDevInit调用;可以使用 ioctl函数中 FIODISKFORMAT 和 FIODISKINIT 分别实现磁盘格式化和DOS 磁盘初始化。DosFsMkfs

17、调用供给了一种简易的dosFs 设备初始化的方法。如下l 供给了一组缺省的配置值。l 调用dosFsDevInit。l 使用带有FIODISKINIT 的 ioctl函数初始化磁盘。默认的dosFsMkfs不能使任何dosFs-specific 卷选项DOS_OPT_CHANGENOWARN,DOS_OPT-AUTOSYNC,DOS_OPT-LONGNAMES,DOS_OPT_LOWERCASE,或 DOS_OPT_EXPORT可用。在调用 dosFsMkfs初始化磁盘之前使用 dosFsMkfsOptionsSet,可以使这些选项中的全部组合有效。有关默认配置值的更多信息,见dosFsMkf

18、s手册。1.4 卷配置卷的配置构造(DOS_VOL_CONFIG)在调用 dosFsDevInit时使用。这个构造包含多种描述磁盘上数据分布的dosFs 文件系统变量。构造中的大多数域与引导扇区中的相符。表1 列出在DOS_VOL_CONFIG 构造中的域。表 1:DOS_VOL_CONFIG 域。域 描述dosvc_mediaByte 媒体描述符字节dosvc_secPerClust 每簇的扇区数dosvc_nResrvd 第一个FAT 拷贝之前的保存扇区数,最小值为1引导扇区 dosvc_nFats FAT 拷贝数dosvc_secPerFat 每个FAT 拷贝的扇区数dosvc_maxR

19、ootEnts 根名目中条目的最大值dosvc_nHidden 隐蔽扇区数,通常为 0 dosvc_options VxWorks 特别文件系统选项dosvc_reserved 风河公司为将来使用保存调用dosFsConfigInit 是初始化DOS_VOL_CONFIG 的简便方法。它把配置变量作为参数并装入构造。这对从Tornado shell中交互地初始化设备很有用见Tornado 用户手册:shell。DOS_VOL_CONFIG 构造必需在dosFsConfigInit( )调用前被安排。DOS_VOL_CONFIG 域在表 1 中除了最终两个DOS_VOL_CONFIG 域,都描述

20、了标准MS_DOS 的特征。域 dosvc_options 对于dosFs 文件系统很特别。这个域可能的选项见表2 表 2:dosFs 卷选项选项 16 进制值 描述DOS_OPT_CHANGENOWARN 0x1 磁盘可能在没有警告的状况下被改动. DOS_OPT_AUTOSYNC 0x2 I/O 期间使磁盘同步DOS_OPT_LONGNAMES 0x4 使用不受 8.3 规格的限制的大小写敏感文件名DOS_OPT_EXPORT 0x8 允许使用NFS 输出DOS_OPT_LOWERCASE 0x40 在磁盘上使用小写文件名前两个选项说明同步磁盘缓存块与物理设备的动作。剩下的选项用于扩展do

21、sFs 的性能。DOS_OPT_CHANGENOWARN假设磁盘没有被卸载就可被替换,或在状态就绪检查中发生变化,则设置这个选项。在这种情形中,有规章的检查磁盘 来确定否发生转变。这将引起系统重大的开支;那么,我们推举使用一种总是在移除前同步和卸载磁盘的机制,或至少 声明状态就绪转变的机制。假设这样的机制适当,或磁盘是不行移动的,则不设置这个属性。自动同步模式在DOS_OPT_CHANGENOWARN 被设置时自动允许见下面有关DOS_OPT_AUTOSYNC 的描述。DOS_OPT_AUTOSYNC设置这个属性可确保磁盘缓存器中的名目和 FAT 数据被修改后尽快写入物理设备,而不仅仅是在文件

22、关闭时被写入物理设备。数据尽可能存储到物理介质上,从而避开在系统紧急大事中丧失数据。由于使用自同步模式时将降低性能,所以 。然而,DOS_OPT_AUTOSYNC 设置不能使 dosFs 在每个 write后自动向磁盘中写数据。这将意味着极大地降低了性能。假设你的应用程序要求dosFs 在每个write后自动向磁盘中写数据,每次调用 write后使用带有 FIOFLUSH 的 ioctl函数注不管什么时候设置DOS_OPT_CHANGENOWARN,自动同步模式都可以自动允许。DOS_OPT_LONGNAMES设置这个属性使系统允许使用大小写敏感文件名,文件名长度不受MS-DOS8.3 版本的

23、限制。DOS_OPT_EXPORT设置这个选项来初始化想使用NFS 输出的文件系统。dosFs 初始化生成附加的支持NFS 协议所需的内存数据构造。这个选项对初始化文件系统可以被输出的是必不行少的,但它不真正输出文件系统。DOS_OPT_LOWERCASE设置这个选项来迫使dosFs 创立的文件名使用小写字母字符。除了 DOS_OPT_LONGNAMES 选项是激活的,通常文件名用大写字母字符假设dosFs 卷是通过基于 PC 的 NFS 的客户机装载的,则需要设置这个选项。假设DOS_OPT_LONGNAMES 选项也被指定,则这个选项无效。计算配置值在 DOS_VOL_CONFIG 构造中

24、,dosvc_secPerClust 和dosvc_secPerFat 的值必需基于被使用的特别的设备进展计算。dosvc_secPerClust这个域用来说明组成一个单独的簇的连续扇区数。由于一簇是每次可以被安排的最小磁盘空间,簇的大小打算了磁盘分 配掌握的微小程度。每簇中扇区数越多,每次安排的扇区数越多,从而降低了磁盘空间使用的整个效率。因此,通常每 簇使用完可能少的扇区,不过每簇少于两个扇区通常是不必要的。FAT 条目最大为 16 位;那么,可以被描述的簇的最大值为6553664KB,或0x1000,这就是一个设备的簇的最大值。为了确定一簇中适当的扇区数,以0x100064k划分磁盘上的

25、全部扇区BLK_DEV 构造中的bd_nBlocks 域,进位舍入到下一个整数,最终结果就是每簇中的扇区数;把这个值赐予DOS_VOL_CONFIG 构造中的dosvc_secPerClust 域。dosvc_secPerFat这个域指定磁盘上每个FAT 拷贝必需的扇区数。要计算出这个值,首先确定磁盘的总簇数。总簇数等于总扇区数BLK_DEV构造中的bd_nBlocks除以每簇的扇区数。如前面提到的,磁盘的簇的最大数为64KB。簇数随每个FAT 条目的位数增加:假设总簇数小于等于4085,FAT 条目为 12 位;假设簇数大于4085,FAT 条目为 16 位。增加的结果是每个FAT 拷贝所需

26、的总字节数。这个字节数除以每个扇区的大小BLK_DEV 构造中的bd_bytesPerBlk 域,打算了每个FAT 拷贝的扇区数按扇区的大小划分;假设有一些剩余,结果再加一。把最终的值赐予dosvc_secPerFat域。假定 512 字节扇区,每个拷贝最大可能的FAT 占用 256 个扇区,计算如下标准磁盘配置对于软盘,很多标准磁盘配置用于MS-DOS 系统。通常,配置通过媒体描述符字节的值唯一识别至少针对一种给定大小的软盘,虽然一些制造商对不同的格式使用完全一样的值。一些广泛使用的配置参见表3。固定磁盘不使用标准磁盘配置,由于它们很少附属于外部的系统,。通常固定磁盘使用 0xF8 的介质格

27、式字节。表 3:MS_DOS 软盘配置容量 160KB 180KB 320KB 360KB 1.2MB 720KB 1.44MB尺寸 5.25“ 5.25“ 5.25“ 5.25“ 5.25“ 3.5“ 3.5“面 1 1 2 2 2 2 2磁道 40 40 40 40 80 80 80扇区/磁道 8 9 8 9 15 9 18字节/扇区 512 512 512 512 512 512 512secPerClust1122 1 2 1nResrvd 1 11111 1NFats 2 2 22222如前所述,在dosfs 文件系统设备应用dosfsdevinit首次初始化时,多种磁盘配置参数被指

28、定。这些参数保存在卷描述符 dos_vol_desc 中。而带有不同参数值的磁盘可能被放置在初始化过的设备驱动器中。假设用另一个磁盘取代磁盘带有最终输入到卷描述符的配置参数,那么磁盘的配置参数必需在使用之前获得。当磁盘被装载时,引导扇区信息从磁盘上读取出来。此数据用来更在卷描述符中的配置数据。留意这个操作发生在磁 盘存取的开头。而且在卷被卸载使用dosfsvolunmount或一个预备好的替换操作被执行之后,又再次执行这个操作。配置数据的自动重初始化有重要的含义。卷描述符数据在初始化磁盘使用fiodiskinit时使用;这样,磁盘使用最近装载的磁盘的配置初始化,而不考虑在dosfdevinit

29、 期间的初始规格,因此我们推举在磁盘装载之前,在dosfsdevinit之后紧接着使用fiodiskinit。设备以 raw 模式翻开,fiodiskinit ioctl函数执行后,关闭设备。 已初始化过磁盘的使用假设你使用一块已经初始化过的有 ms-dos 引导扇区、fat、根名目的磁盘例如,使用统一的ms-dos 格式,则不需要在 dosfsdevinit中供给卷配置数据。可以无视ms-dos 配置数据通过指定一个 null 指针代替在dosfsdevinit( )期间dos_vol_config 构造的地址,不过仅仅在你确信卷的首次使用伴随完全格式化和初始化过的磁盘时才使用这种方法。当装

30、载一个已经初始化过的磁盘时,全部标准的 ms-dos 配置值都从磁盘引导扇区猎取。而指向 dosfs 的选项必需被指明。 。dos_opt_longnames不受 8.3 版本限制的大小写敏感文件名,使用这个选项初始化过的磁盘可以通过引导扇区中一个特别的卷id 字符串自动识别。dos_opt_changenowarn, dos_opt_autosync, dos_opt_lowercase, 和 dos_opt_export 选项只记录在内存中,不放在磁盘上。因此当用 null 代替 dos_vol_config 构造指针初始化磁盘时, 不能删除这些选项。另外可以使用dosfsdevinito

31、ptionsset程序设置这些选项为默认值;除非支持明白的dos_vol_config 信息,不然默认值将应用于后面全部使用dosfsdevinit初始化的dosfs 文件系统。卷配置信息访问可以通过在tornado shell 中使用dosfsconfigshow2 和 dosfsconfigget获得磁盘信息。这里参考 tornadoshell。使用 dosfsconfigshow显示象最大连续区域和设备名这样的配置信息。例如:- dosfsconfigshow “/ram1/“ value = 0 = 0x0输出到标准输出设备,如下device name: /ram1/total num

32、ber of sectors: 400 bytes per sector: 512media byte: 0xf0# of sectors per cluster: 2 # of reserved sectors: 1# of fat tables: 2# of sectors per fat: 1max # of root dir entries: 112 # of hidden sectors: 0 removable medium: falsedisk change w/out warning: not enabled auto-sync mode: not enabledlong fi

33、le names: not enabled exportable file system: not enabled volume mode: o_rdwr (read/write) available space: 199680 bytesmax avail. contig space: 199680 bytesdosfsconfigget 程序把磁盘信息存储到dos_vol_config 构造中。这对于初始化一个磁盘与已有磁盘一样配置很有用,另外对于用dosfsmkfs在磁盘上初始化dosfs 文件系统,并需要猎取被计算的目前配置值也很有用。装载卷通常磁盘卷在对磁盘上文件或名目的第一个ope

34、n或 creat操作时自动装载。某些 ioctl调用也可以引起磁盘装载。 假设在dosfsdevinit调用期间,一个null 指针被指定代替dos_vol_config 构造的地址,那么磁盘被马上装载以获得配置值。磁盘装载时,从磁盘上读取引导扇区、fat 和名目数据。卷描述符dos_vol_desc 被更以反映装载磁盘的配置。自动装载发生在dosfsvolumount或替换就绪操作之后的第一个文件存取时。假设磁盘在带有dos_opt_changenowarn 选项设置的dosfsdevinit调用期间被定义,磁盘会被周期性地自动装载。当磁盘以raw 模式翻开时自动装载不会发生;见翻开整个设备

35、raw 模式。警告:由于设备名是被使用简洁子链匹配的i/o 系统识别的,所以文件系统不使用单独的斜杠/作为文件名。假设使用斜杠可能发生意外的结果。可以使用 usrfdconfig装载卷,但是这个程序不返回dos_vol_desc 构造。用 usrfdconfig装载的卷不能使用很多 dosfs 命令,包括dosfsvolunmount。不过 dofs 的 ioctl命令包括fiounmount通过fd 存取卷信息,所以可以和usrfdconfig一起使用。文件 i/odosfs 文件系统设备上的文件创立、删除、读写都使用标准 vxworks i/o 程序: creat( )、remove( )

36、、write( )和 read( )。整个设备的翻开raw 模式可以翻开整个的 dosfs 卷。这是在 open和 creat调用期间通过只指定设备名来实现。当一个合法文件被翻开时返回一个文件描述符;然而,在文件操作符上的操作影响整个设备。以这种方式翻开整个卷叫作raw 模式。翻开整个设备的通常缘由是为ioctl函数获得一个不属于某个文件的文件描述符。如fionfree 函数,它返回在卷上的有效字节数。然而,对于很多此类函数,文件描述符可以是任何翻开的此卷的,甚至一个特定文件的文件描述符。 当一个磁盘用ms-dos 数据构造初始化引导扇区、空的根名目、fat时,以 raw 模式翻开此设备。io

37、ctl函数 fiodiskinit执行初始化。可以以 raw 模式读写磁盘上的数据。在这种模式下,整个的磁盘数据区被看作一个单独的大文件。没知名目条目用来描述用 raw 模式写的任何数据。有关对整个设备包括使用 ms-dos 的数据构造的区域低级 i/o,见 4.4 raw 文件系统:rawfs 和有关“vxworks 参考手册库”下的rawfslib 的在线参考。子名目创立当子名目到达最大条目数时,子名目可以在根名目以外的任何名目下创立。子名目有两种创立方式:1. 使用带有fiomkdir 函数的ioctl:名目名传递给 ioctl。ioctl调用使用的文件描述符可以通过以下方式获得:翻开整

38、个卷raw 模式、一个正规文件或卷上的另一个名目。2. 使用 open:创立一个名目,o_creat 选项必需设置在标记参量中翻开,fstat_dir 选项必需设置在模式参量中。 open调用返回一个文件描述符(描述名目)。这个文件描述符用于只读,当不再需要时关闭这个描述符。使用以上两种方法的任意一种方法创立名目,名目名必需被指明。这个名字可以是一个全称路径名,或是一个相对于 当前工作名目的路径名。子名目删除被删除的名目必需是空的除了“.”和“.”条目。删除名目有两种方法:1. 使用带有fiormdir 函数的 ioctl调用,指定名目名。另外,文件描述符可以指向卷上的任何文件、名目、或卷自己

39、。2. 使用remove函数,指定名目名。名目条目每个 dosfs 名目包含一组条目描述它的文件和子名目。每个条目包含有关文件或子名目的信息: 文件名一个 8 字节字符串假设需要,空格填补指定文件名。命名可以长至 40 个字符;详情见 4.2.18 长文件名支持 文件扩展名一个 3 字节的字符串空格填补指定文件名或子名目名的一个延长局部。假设选择了不受 8.3 版本限制的高级文件名, 扩展概念是不适用的。文件属性一个字节域指定文件的特征; 时间文件编码创立修改的时间日期文件编码的创立修改的日期簇号文件内开头簇的数目。通过搜寻fat 找后来的簇文件大小文件的大小,对描述子名目的条目来说这个域通常

40、为零。读名目条目在 dosfs 卷上的名目可以使用opendir,readdir,rewinddir,和 closedir程序来搜寻。这些调用可以用来确定文件名和子名目。使用 fstat或 stat函数可以获得有关指定文件更具体的信息。连同标准文件信息,被这些程序使用的构造还从名目条目返回文件属性字节。文件属性在 dosfs 名目条目中的文件属性字节由一组标记位组成,每位标志一个特别的文件特征。文件属性字节描述的特征见下表。表:文件属性字节中的标记vxworks 标记名 十六进制值 描述dos_attr_rdonly 0x01 只读dos_attr_hidden 0x02 隐蔽文件dos_at

41、tr_system 0x04 系统文件dos_attr_vol_label 0x08 卷标dos_attr_directory 0x10 子名目dos_attr_archive 0x20 存档文件当一个文件被翻开为o_wronly 或 o_rdwr 时,dos_attr_rdonly 被选中。假设标记设置了,open返回 error,并且设置 errnos 为_dosfslib_read_only。警告:ms-dos 隐蔽文件和系统文件标记dos_attr_hidden 和 dos_attr_system被 dosfslib 无视。虽然他们保持完整, 但他们不产生特别的处理例如,带有这些标记的

42、条目当搜寻名目时被公布。卷标标记dos_attr_vol_label 用来说明一个包含磁盘的dosfs 卷标的名目条目。标签不是必需的,假设使用了,每卷只有一个卷标条目,在根名目中。当读一个名目的内容时,卷标条目不被报告用readdir。只有使用 ioctl函数 fiolabelget 时,卷标条目才被确定。使用ioctl函数fiolabelset,卷标可以被设置成任何11 个字符或更少字符的字符串。在这些ioctl调用期间任何翻开到此卷的文件描述符都可以使用。名目标记dos_attr_directory 用来指出这个条目不是一个正规的文件而是一个子名目。存档标记dos_attr_archiv

43、e 在文件被创立或修改时被设置。这个标记被其他搜寻卷的程序查找修改正的文件并选择存档使用。这样的程序必需去除存档标记,由于vxworks 不做这个工作 。属性字节中的全部标记除了名目和卷标标记可以使用ioctl函数filoattribset 设置或去除。这个函数调用在指定文件翻开后转变其属性。在 filattribset 调用中指定的属性字节值被直接复制;为了保护存在的标记设置,使用 stat或fstat确定当前的属性,然后使用and 和 or 操作转变他们。例:设置dosfs 文件属性这个例子使一个dosfs 文件只读,并保持其他属性不变#include “vxworks.h“#includ

44、e “iolib.h“ #include “dosfslib.h“ #include “sys/stat.h“ #include “fcntl.h“status changeattributes (void)int fd;struct stat statstruct;/* open file */if (fd = open (“file“, o_rdonly, 0) = error) return (error);/* get directory entry data */if (fstat (fd, &statstruct) = error) return (error);/* set re

45、ad-only flag on file */if (ioctl (fd, fioattribset, (statstruct.st_attrib | dos_attr_rdonly)= error) return (error);/* close file */ close (fd);文件日期和时间名目条目包含一个文件和名目的时间和日期。这个时间在文件创立时被设置,并在文件被修改后关闭时被更。描述子 名目的条目不被更它们总是包含名目的创立日期和时间。dosfslib 库在内在构造中维持日期和时间。然而通常没有一个装置来自动更时间和日期,这供给了两种不同的设置日期和时间的方法。第一种方法应用两

46、个程序dosfsdateset和dosfstimeset。使用如下: dosfsdateset1990,12,25/*设置日期为 1990 年 12 月 25 日*/ dosfstimeset14,30,22/*设置时间为 14:30:22*/必需按时调用这些程序来更日期和时间的值。其次种方法要求一个用户支持的钩子程序。假设使用 dosfsdatetimeinstall安装了时间和日期的钩子程序,只要dosfslib 要求猎取当前日期和时间,程序就被调用。这样可以利用可被读取硬件日历时钟来猎取当前时间。也可以用于其它的维持当前时间日期的应用软件。定义日期/时间钩子程序如下datetimehoo

47、k 是一个例子名,真正的程序名可以是任何名void datetimehook (dos_date_time * pdatetime /* ptr to dosfs date & time struct */)在钩子程序的入口,包含最近的时间和日期的dos_date_time 构造设置在dosfslib 中。接下来,钩子程序用当前正确的时间和日期填充构造。构造中没有发生转变的区域保持从前的值。ms-dos 规格在文件时间标记上仅供给了 2 秒间隔的时间戳。假设在 dosfstimeset或日期/时间钩子程序里指定的秒数是带零头的,那么它四舍五入到下一个偶数。dosfslib 使用的日期和时间被初始为 1998 年 1 月 1 日,00:00:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁