本发明涉及文件存储
技术领域:
:,特别涉及一种存储cos文件的方法及装置。
背景技术:
::随着微电子技术的发展,各种各样的智能卡开始进入人们的生活。不论是手机卡、银行卡、水卡、电卡还是社保卡、门禁卡甚至是身份证,它们都是不同行业的智能卡。由于智能卡的应用非常广泛其应用环境千差万别,其用户数据各有不同,而智能卡需要分配合适的用户空间来保存这些业务数据。早期的智能卡由于处理速度慢,存储空间小,一般业务数据都直接写入存储区。但是卡片应用直接操作存储区,容易造成存储区数据的混乱而且不符合卡片操作系统(cos,chipoperatingsystem)分层设计的趋势。为此新一代的智能卡普遍采用文件来保存数据,通过文件系统来隔离应用和底层读写存储区的操作。对于智能卡cos系统根据其功能可以划分为四个层次:底层固件、存储管理系统、文件系统、应用系统。通常文件系统和存储管理系统密切相关,文件系统负责实现文件的创建、选择、读写、删除等操作。而在文件创建和删除的过程中,需要调用存储管理模块的空间分配和空间回收指令。在实现本发明过程中,发明人发现现有技术中至少存在如下问题:由于智能卡硬件的特点,现有的卡片文件系统多集中于具体功能的实现,较少综合考虑文件系统的通用性及高效性。对于具体的卡片,由于应用场景不同,通常生产发行之后会建立不同的文件系统。然而由于智能卡系统简单,资源有限,无法建立类似fat(fileallocationtable,文件配置表)的通用文件系统,因此各个厂家因地制宜设计了不同的文件系统。常见的有基于硬件地址的用户数据直接映射或者以双向链表来管理所有的文件。例如将文件直接映射到存储区,实现高效的文件读写。但是这样的系统使得文件严重依赖于存储器的分配,通用性较差,更换芯片时整个软件系统难以移植。有些设计者通过建立双向链表将所有文件按链表组织起来进行访问及控制,这样虽然实现了较好的通用性,然而文件访问时需要遍历整个链表,导致系统执行效率低下,不能更好的满足客户需求。公开于该
背景技术:
:部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。技术实现要素:本发明的目的在于提供一种存储cos文件的方法及装置,从而克服现有cos文件系统执行效率低下的缺陷。本发明实施例提供的一种存储cos文件的方法,包括:获取用于存储目标cos文件的指令,所述目标cos文件包括文件头和文件体;将所述目标cos文件的文件头存储至相对应的文件头链表的节点处,所述文件头链表存储于第一存储区,且所述文件头链表的节点包含一个或多个子节点,且每个子节点对应一个cos文件的文件头;将所述文件体存储于第二存储区的相应位置。在一种可能的实现方式中,在所述将所述目标cos文件的文件头存储至相对应的文件头链表的节点处之后,还包括:确定所述目标cos文件的上一级cos文件,并将与所述上一级cos文件对应的子节点的后继指针设置为指向所述目标cos文件的文件头。在一种可能的实现方式中,所述文件头链表的节点设有前驱指针和后继指针,且所述文件头链表的节点、所述节点的前驱指针指向的上一个节点和所述节点的后继指针指向的下一个节点中的文件头为同级别的文件头。在一种可能的实现方式中,在所述将所述目标cos文件的文件头存储至相对应的文件头链表的节点处之后,该方法还包括:确定预设的包含一个或多个数据项的空间管理表,所述数据项包括用于表示空闲空间的起始地址和长度;根据所述目标cos文件的文件头的起始地址和长度更新相对应的数据项的起始地址和长度。在一种可能的实现方式中,该方法还包括:在接收到删除目标cos文件的指令之后,删除所述目标cos文件的文件头和文件体,并确定存储文件头的释放空间;根据所述空间管理表的数据项确定空闲空间,当存在空闲空间使得所述释放空间的起始地址与所述空闲空间的结束地址相同、或者所述释放空间的结束地址与所述空闲空间的起始地址相同时,将所述释放空间与所述空闲空间合并;当所述释放空间的起始地址或结束地址与所有空闲空间的起始地址和结束地址均不相同时,根据所述释放空间为所述空间管理表添加新的数据项,所述新的数据项的起始地址与所述释放空间的起始地址相同,所述新的数据项的长度为所述释放空间的结束地址与起始地址之间的空间长度。基于同样的发明构思,本发明实施例提供的一种存储cos文件的装置,包括:获取模块,用于获取用于存储目标cos文件的指令,所述目标cos文件包括文件头和文件体;第一存储模块,用于将所述目标cos文件的文件头存储至相对应的文件头链表的节点处,所述文件头链表存储于第一存储区,且所述文件头链表的节点包含一个或多个子节点,且每个子节点对应一个cos文件的文件头;第二存储模块,用于将所述文件体存储于第二存储区的相应位置。在一种可能的实现方式中,该装置还包括:设置模块;在所述第一存储模块将所述目标cos文件的文件头存储至相对应的文件头链表的节点处之后,所述设置模块用于确定所述目标cos文件的上一级cos文件,并将与所述上一级cos文件对应的子节点的后继指针设置为指向所述目标cos文件的文件头。在一种可能的实现方式中,所述文件头链表的节点设有前驱指针和后继指针,且所述文件头链表的节点、所述节点的前驱指针指向的上一个节点和所述节点的后继指针指向的下一个节点中的文件头为同级别的文件头。在一种可能的实现方式中,该装置还包括:更新模块;在所述第一存储模块将所述目标cos文件的文件头存储至相对应的文件头链表的节点处之后,所述更新模块用于确定预设的包含一个或多个数据项的空间管理表,所述数据项包括用于表示空闲空间的起始地址和长度;根据所述目标cos文件的文件头的起始地址和长度更新相对应的数据项的起始地址和长度。在一种可能的实现方式中,该装置还包括:接收模块和处理模块;所述接收模块用于在接收到删除目标cos文件的指令之后,删除所述目标cos文件的文件头和文件体,并确定存储文件头的释放空间;所述处理模块用于根据所述空间管理表的数据项确定空闲空间,当存在空闲空间使得所述释放空间的起始地址与所述空闲空间的结束地址相同、或者所述释放空间的结束地址与所述空闲空间的起始地址相同时,将所述释放空间与所述空闲空间合并;当所述释放空间的起始地址或结束地址与所有空闲空间的起始地址和结束地址均不相同时,根据所述释放空间为所述空间管理表添加新的数据项,所述新的数据项的起始地址与所述释放空间的起始地址相同,所述新的数据项的长度为所述释放空间的结束地址与起始地址之间的空间长度。本发明实施例提供的一种存储cos文件的方法及装置,文件头和文件体在存储区的不同位置保存,从而实现对文件头的集中管理,方便利用包含文件概要信息的文件头进行文件检索、查询等常见操作,提升系统效率;文件头以链表形式进行管理,且每个目录设有相应的文件头链表,方便对同一目录下的文件执行统一操作,删除用户数据时无需遍历所有的卡片文件。利用空间管理表实现对文件目录存储空间的动态管理,可以快速新增或者删除cos文件,进一步提高处理效率。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。附图说明附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:图1为本发明实施例中存储cos文件的方法流程图;图2为本发明实施例中文件头链表的一种存储示意图;图3为本发明实施例中文件头链表的另一种存储示意图;图4为本发明实施例中空间管理表的一种示意图;图5为本发明实施例中存储cos文件的装置的第一结构图;图6为本发明实施例中存储cos文件的装置的第二结构图;图7为本发明实施例中存储cos文件的装置的第三结构图;图8为本发明实施例中存储cos文件的装置的第四结构图。具体实施方式下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件未作详细描述,以便于凸显本发明的主旨。根据本发明实施例,提供了一种存储cos文件的方法,图1为该方法的流程图,具体包括步骤101-103:步骤101:获取用于存储目标cos文件的指令,目标cos文件包括文件头和文件体。本发明实施例中,cos(chipoperatingsystem)文件为智能卡文件系统中的一个文件元素。智能卡文件系统通常由以下元素组成:mf(masterfile,主文件)、df(dedicatedfile,专有文件)、adf(applicationdefinitionfile,应用定义文件)、ddf(directorydefinitionfile,目录定义文件)、ef(elementaryfile,基本文件)等。其中mf是整个文件系统的根,如果把智能卡文件系统类比为目录结构,那么mf则是根目录。其中df和adf表示文件子目录,df可以包含adf,而adf下不能存在任何目录结构,即adf下只包含ef;ef表示目录中的基本文件;那些既包含ef又包含子df的df称作ddf。具体的,目标cos文件也为一个cos文件,其由两部分组成,分别为文件头和文件体。文件头包含文件的概要信息,文件体保存文件的实际内容。本发明实施例中,文件头和文件体在存储区的不同位置保存。其中,文件头的一种定义方式参见表1所示:表1数据文件id文件长度文件地址文件类型文件状态文件权限长度2字节2字节4字节1字节2字节8字节步骤102:将目标cos文件的文件头存储至相对应的文件头链表的节点处,文件头链表存储于第一存储区,且文件头链表的节点包含一个或多个子节点,且每个子节点对应一个cos文件的文件头。本发明实施例中,为了保证文件系统设计的灵活性,文件头信息采用链表管理。具体的,在每个目录下预设一个文件头链表,文件头链表的每个节点用于存储cos文件的文件头。同时,链表的大小根据系统的设计而定,通常需要综合考虑各个业务目录下的基本文件数量;过大的链表对于只有很少基本文件的目录会浪费空间,过小的链表在大业务应用时会增加链表自身的管理成本。本发明实施例中,文件头链表的每个节点包含一个或多个子节点,该子节点用于存储文件头。图2示出了文件头链表的一种存储形式,其中,mf是文件系统的根节点,是文件创建和搜索的起始点,在文件头链表的第一个表格中只保存处于mf下的文件头,即mf设置于第一个子节点处;之后的ddf1文件和四个ef文件的文件头均位于同一目录下(图2中即均位于mf下);链表的每个节点包括三个子节点,第一个节点包括mf、ddf1和ef三个文件头相对应的子节点,第二个节点包括三个ef文件头相对应的子节点;且第一个节点的后继指针(即next)指向第二个节点。步骤103:将文件体存储于第二存储区的相应位置。本发明实施例中,文件头和文件体在存储区的不同位置保存。具体的,用于存储文件头的文件头链表存储于第一存储区,文件体存储于第二存储区,从而实现对文件头的集中管理。本发明实施例提供的一种存储cos文件的方法,文件头和文件体在存储区的不同位置保存,从而实现对文件头的集中管理,方便利用包含文件概要信息的文件头进行文件检索、查询等常见操作,提升系统效率;文件头以链表形式进行管理,且每个目录设有相应的文件头链表,方便对同一目录下的文件执行统一操作,无需遍历所有的卡片文件。本发明另一实施例提供了一种存储cos文件的方法,包括图1所示的步骤101-103,其实现原理和有益效果参考图1所示的实施例。此外,本实施例在步骤102将目标cos文件的文件头存储至相对应的文件头链表的节点处之后,还包括修改指针的过程,该过程具体包括:确定目标cos文件的上一级cos文件,并将与上一级cos文件对应的子节点的后继指针设置为指向目标cos文件的文件头。本发明实施例中,cos文件是分层级的,例如df下存在一个adf,则该adf的上一级文件即为该df。具体的,参见图3所示,假设现在需要在ddf1文件下存储adf1(或者ef2、ef3、ef4),即adf1为目标cos文件,此时ddf1为adf1的上一级cos文件,此时在存储adf1的文件头的同时,将与ddf1对应的子节点的后继指针设置为指向adf1的文件头。即,文件头链表中节点存储的数据除了包含文件头之外,还包含该文件头的后继指针;可选的,还可以包括前驱指针,即目标cos文件的前驱指针设置为指向上一级cos文件,即adf1的前驱指针指向ddf1。此外,文件头链表的节点设有前驱指针和后继指针,且文件头链表的节点、节点的前驱指针指向的上一个节点和节点的后继指针指向的下一个节点中的文件头为同级别的文件头。如图3所示,同一个文件头链表中所包含的文件头均为同一级别的文件头,即存储在同一个文件目录下;如ddf1文件头、ef1文件头、文件头n+1、文件头n+2、文件头n+3为同一级别的文件头,且均存储在mf下;adf1文件头、ef2文件头、ef3文件头、ef4文件头为同一级别的文件头,且均存储在ddf1下。其中,文件头n+1、文件头n+2、文件头n+3中的n+1等表示文件头的序号,该文件头可以为df,也可以为ef,此处不做限定。本发明实施例中,对于文件头链表的主要操作有:1)向存储管理系统申请空间存放第一个文件头表(即mf文件头)。2)为后继文件头表申请空间,修改链表指针。3)建立文件时寻找空的节点,空节点的判定依据为文件头信息为0xff。4)删除文件时对相应的文件头写入0xff,只要写入2字节即可。是否需要将该条文件头信息全部写入0xff可以根据业务的要求商榷。5)当一个文件头表为空时需要修改链表,释放空间。在上述实施例的基础上,在将目标cos文件的文件头存储至相对应的文件头链表的节点处之后,该存储cos文件的方法还包括管理存储空间的过程,具体包括步骤a1-a2:步骤a1:确定预设的包含一个或多个数据项的空间管理表,数据项包括用于表示空闲空间的起始地址和长度。在实现文件系统时需要对创建df时申请的空间进行动态管理,当应用在df下创建文件时,需要分配空间。本发明实施例中,预设由数据项组成的空间管理表,利用空间管理表实现对空间的动态管理。其中,数据项包括用于表示空闲空间的起始地址和长度,即每个数据项对应一块可用的空闲空间,根据数据项中的数值即可以确定哪些空间为空闲空间。步骤a2:根据目标cos文件的文件头的起始地址和长度更新相对应的数据项的起始地址和长度。本发明实施例中,每个df文件设有一个空间管理表,在建立df后,分配给该df的存储空间是设置好的;在初始状态时,分配给该df的所有存储空间均为可用空间,即空间管理表只有一个数据项,该数据项记录可分配空间的起始地址和长度。随着df下需要存储目标cos文件,起始地址逐渐变大,而长度逐渐变小,直到最后空间减小到不够分配即无空间可供分配。但此时表格中仍然只有一个数据项(上述过程未考虑删除文件的情况)。例如,当前数据项的起始地址和长度分别为0x1000、50bit,当需要存储目标cos文件的文件头时,则该文件头的起始地址可以设为0x1000,若文件头的长度为16bit,则在为文件头分配相应的存储空间后,空闲的空间从0x1010开始,即此时数据项的起始地址为0x1010,长度变为34bit。在一种可能的实现方式中,上述管理存储空间的过程还包括步骤a3-a5:步骤a3:在接收到删除目标cos文件的指令之后,删除目标cos文件的文件头和文件体,并确定存储文件头的释放空间。步骤a4:根据空间管理表的数据项确定空闲空间,当存在空闲空间使得释放空间的起始地址与空闲空间的结束地址相同、或者释放空间的结束地址与空闲空间的起始地址相同时,将释放空间与空闲空间合并。步骤a5:当释放空间的起始地址或结束地址与所有空闲空间的起始地址和结束地址均不相同时,根据释放空间为空间管理表添加新的数据项,新的数据项的起始地址与释放空间的起始地址相同,新的数据项的长度为释放空间的结束地址与起始地址之间的空间长度。本发明实施例中,当应用删除cos文件时,会将本用于存储该cos文件的空间释放,存储空间新增了一块空闲空间,即释放空间;此时将释放空间与现有的空闲空间进行比较,确定是否需要在空间管理表中新增数据项以表示该释放空间。如果释放空间和空闲空间的地址可以衔接,则修改数据项的数据使得释放空间和空闲空间合并,如果待释放空间的地址与空闲地址不相关,则在空间管理表中添加数据项。本发明实施例中,空间管理表中可能存在多个数据项,即对应多块空闲空间,每个空闲空间具有不同的起始地址和长度,此时,需要依次判断释放空间与其中的一个空闲空间是否衔接。具体的,当存在空闲空间使得释放空间的起始地址与空闲空间的结束地址相同、或者释放空间的结束地址与空闲空间的起始地址相同时,将释放空间与空闲空间合并;当释放空间的起始地址或结束地址与所有空闲空间的起始地址和结束地址均不相同时,根据释放空间为空间管理表添加新的数据项,新的数据项的起始地址与释放空间的起始地址相同,新的数据项的长度为释放空间的结束地址与起始地址之间的空间长度。空间管理表的一种表现方式参见图4所示。本发明实施例中,利用空间管理表实现对文件目录存储空间的动态管理,可以快速新增或者删除cos文件,该空间管理表不仅可以适用于文件头,还可以适用于文件体,本发明实施例对此不做限定。以上详细介绍了一种存储cos文件的方法流程,该方法也可以通过相应的装置实现,下面详细介绍该装置的结构和功能。本发明实施例提供的一种存储cos文件的装置,参见图5所示,包括:获取模块51,用于获取用于存储目标cos文件的指令,所述目标cos文件包括文件头和文件体;第一存储模块52,用于将所述目标cos文件的文件头存储至相对应的文件头链表的节点处,所述文件头链表存储于第一存储区,且所述文件头链表的节点包含一个或多个子节点,且每个子节点对应一个cos文件的文件头;第二存储模块53,用于将所述文件体存储于第二存储区的相应位置。在一种可能的实现方式中,参见图6所示,该装置还包括:设置模块54;在所述第一存储模块52将所述目标cos文件的文件头存储至相对应的文件头链表的节点处之后,所述设置模块54用于确定所述目标cos文件的上一级cos文件,并将与所述上一级cos文件对应的子节点的后继指针设置为指向所述目标cos文件的文件头。在一种可能的实现方式中,所述文件头链表的节点设有前驱指针和后继指针,且所述文件头链表的节点、所述节点的前驱指针指向的上一个节点和所述节点的后继指针指向的下一个节点中的文件头为同级别的文件头。在一种可能的实现方式中,参见图7所示,该装置还包括:更新模块55;在所述第一存储模块52将所述目标cos文件的文件头存储至相对应的文件头链表的节点处之后,所述更新模块55用于确定预设的包含一个或多个数据项的空间管理表,所述数据项包括用于表示空闲空间的起始地址和长度;根据所述目标cos文件的文件头的起始地址和长度更新相对应的数据项的起始地址和长度。在一种可能的实现方式中,参见图8所示,该装置还包括:接收模块56和处理模块57;所述接收模块56用于在接收到删除目标cos文件的指令之后,删除所述目标cos文件的文件头和文件体,并确定存储文件头的释放空间;所述处理模块57用于根据所述空间管理表的数据项确定空闲空间,当存在空闲空间使得所述释放空间的起始地址与所述空闲空间的结束地址相同、或者所述释放空间的结束地址与所述空闲空间的起始地址相同时,将所述释放空间与所述空闲空间合并;当所述释放空间的起始地址或结束地址与所有空闲空间的起始地址和结束地址均不相同时,根据所述释放空间为所述空间管理表添加新的数据项,所述新的数据项的起始地址与所述释放空间的起始地址相同,所述新的数据项的长度为所述释放空间的结束地址与起始地址之间的空间长度。本发明实施例提供的一种存储cos文件的装置,文件头和文件体在存储区的不同位置保存,从而实现对文件头的集中管理,方便利用包含文件概要信息的文件头进行文件检索、查询等常见操作,提升系统效率;文件头以链表形式进行管理,且每个目录设有相应的文件头链表,方便对同一目录下的文件执行统一操作,删除用户数据时无需遍历所有的卡片文件。利用空间管理表实现对文件目录存储空间的动态管理,可以快速新增或者删除cos文件,进一步提高处理效率。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。前述对本发明的具体示例性实施方案的描述是为了说明和例证的目的。这些描述并非想将本发明限定为所公开的精确形式,并且很显然,根据上述教导,可以进行很多改变和变化。对示例性实施例进行选择和描述的目的在于解释本发明的特定原理及其实际应用,从而使得本领域的技术人员能够实现并利用本发明的各种不同的示例性实施方案以及各种不同的选择和改变。本发明的范围意在由权利要求书及其等同形式所限定。当前第1页12当前第1页12