CN104978355A - 一种cpio文件的操作方法及装置 - Google Patents
一种cpio文件的操作方法及装置 Download PDFInfo
- Publication number
- CN104978355A CN104978355A CN201410143816.XA CN201410143816A CN104978355A CN 104978355 A CN104978355 A CN 104978355A CN 201410143816 A CN201410143816 A CN 201410143816A CN 104978355 A CN104978355 A CN 104978355A
- Authority
- CN
- China
- Prior art keywords
- file
- entry
- son
- cpio
- index table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种CPIO文件的操作方法及装置,该方法包括:按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。本发明能够实现在Windows平台上快速无损读写CPIO格式文件。
Description
技术领域
本发明涉及计算机文件技术领域,尤其涉及一种CPIO文件的操作方法及装置。
背景技术
CPIO文件格式是UNIX操作系统的文件格式。CPIO文件本质上是一个文件集合,包涵多个子文件,每个子文件包括文件header和文件内容content,包含一系列文件信息及内容,诸如文件名、绝对路径、时间戳、设备类型及版本、用户组及访问权限、文件版本、文件大小、文件内容等。Linux上利用cpio程序操作CPIO文件,包括访问、创建、读写等。
目前采用Android系统的便携式电子设备如平板上加载有CPIO文件。在开发过程中,需要通过相应的接口从便携式电子设备上下载CPIO文件,对下载的CPIO文件进行修改后再加载到便携式电子设备上,如修改ramdisk(虚拟内存盘)等CPIO文件以实现客户个性化定制。
目前基于Windows平台工具修改便携式电子设备加载的CPIO文件,具体方案如下:
cygwin是一个在windows平台上运行的unix模拟环境,通过在Windows上安装cygwin,利用cygwin自带的cpio.exe程序将读取的CPIO文件散开到本地文件夹;修改完成后再利用cpio.exe程序将本地文件夹制作成CPIO文件,最后再将CPIO文件加载到采用Android系统的便携式电子设备上。
CPIO文件本质上就是将一堆CPIO子文件(包括文件和目录形式的子文件)的内容按格式堆砌在一起,将CPIO文件存储到本地时,由于CPIO文件是UNIX操作系统的文件格式,但用户是看不到的这些文件的,利用cygwin自带的cpio.exe程序执行散开操作,可以使用户在磁盘上看到CPIO文件中每个子文件。
基于在windows平台上运行的cygwin读写CPIO文件有如下缺点:
1)将读取的CPIO文件散开到本地文件夹时,目标磁盘必须为NTFS(NewTechnology File System)文件系统格式。
因为cpio格式中文件属性为4字节,FAT32(File Allocation Table)文件系统的文件属性只有2字节;如果散开到FAT32格式的磁盘下会导致属性丢失,将制作的CPIO文档重新加载到便携式电子设备上会出现各种访问权限问题。
cygwin自带的cpio.exe的临时目录一般都在系统盘下,因此本地文件夹也在系统盘,如果系统盘不是NTFS格式就导致cpio.exe不能正常使用。
2)散开再重新制作这个过程针对的是整个CPIO文件,如果仅修改其中一个文件,也需要将整个CPIO文件散开,在修改完其中一个文件后还要重新做成CPIO整合文件,不能在不散开CPIO文件的情况下单独对其中的某个文件进行编辑,效率低下。
3)cpio.exe部署发布时必须包含cygwin相应的动态库DLL。
基于以上缺陷,需要考虑如何实现在Windows平台上快速无损读写CPIO文件。
发明内容
本发明提供一种CPIO文件的操作方法及装置,能够实现在Windows平台上快速无损读写CPIO文件。
本发明提供一种CPIO文件的操作方法,包括:
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;
对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。
优选地,通过如下任一个或任意多个操作指令完成对CPIO文件的操作:
读操作指令;重命名操作指令;对文件内容的编辑操作指令;删除操作指令;新增操作指令。
优选地,当接收到操作指令为读操作指令或重命名操作指令或对文件内容的编辑操作指令或删除操作指令时,定位需要进行操作的子文件的位置,具体包括:
根据需要进行操作的子文件的文件名,在条目索引表查找到包含该文件名的条目,根据该条目中的绝对偏移定位需要进行操作的子文件位置;
当接收到的操作指令为新增操作指令,定位需要进行操作的子文件的位置,具体包括:
根据最后一个条目中文件头中文件的大小及绝对偏移,定位CPIO文件的尾部位置为需要进行操作的子文件位置。
优选地,当接收到的操作指令为读操作指令时,确定操作后条目不会改变,对相应位置的子文件进行操作,具体包括:
从绝对偏移的位置读取文件头,根据文件头中的文件大小读取文件内容;
当接收到的操作指令为重命名操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若重命名后文件名长度不变,则修改文件头中的相应的文件名,若重命名后文件名长度变短或变长,则将相应的文件名对应的子文件的文件内容及之后的所有子文件前移或后移,修改文件头中的相应的文件名;
若重命名后文件名长度不变,则同步更新条目索引表中的文件名,若重命名后文件名长度变短或变长,则重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对文件内容的编辑操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若编辑后文件内容长度不变,则直接覆盖相应的文件内容,若编辑后文件内容长度变长或变短,则先将相应的文件内容之后所有的CPIO文件后移或前移,再覆盖相应的文件内容;
若编辑后文件内容长度变长或变短,则修改文件头中的文件大小,并重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为新增操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
从CPIO文件的尾部位置开始,存储新的子文件;
根据该子文件的文件头,在条目索引表中增加该子文件的条目。
优选地,所述子文件的形式为文件或子目录,当接收到的操作指令为对文件的内容的删除操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子文件,将该子文件之后的所有子文件前移;
完成前移后重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对子目录的删除操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子目录及其所在条目,将该子目录之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表;
重复如下步骤至查找不到包含删除的子目录的子文件:重新遍历条目索引表,确定子文件的文件名中包含删除的子目录时,删除该子文件,将该子文件之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表。
本发明还提供一种CPIO文件的操作装置,包括:
解析单元,用于按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
索引建立单元,用于按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
定位单元,用于每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;
操作及索引更新单元,用于对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。
优选地,所述定位单元和操作及索引更新单元通过如下任一个或任意多个操作指令完成对CPIO文件的操作:
读操作指令;重命名操作指令;对文件内容的编辑操作指令;删除操作指令;新增操作指令。
优选地,当定位单元接收到操作指令为读操作指令或重命名操作指令或对文件内容的编辑操作指令或删除操作指令时,定位需要进行操作的子文件的位置,具体包括:
根据需要进行操作的子文件的文件名,在条目索引表查找到包含该文件名的条目,根据该条目中的绝对偏移定位需要进行操作的子文件位置;
当定位单元接收到的操作指令为新增操作指令,定位需要进行操作的子文件的位置,具体包括:
根据最后一个条目中文件头中文件的大小及绝对偏移,定位CPIO文件的尾部位置为需要进行操作的子文件位置。
优选地,当定位单元接收到的操作指令为读操作指令时,确定操作后条目不会改变,对相应位置的子文件进行操作,具体包括:
从绝对偏移的位置读取文件头,根据文件头中的文件大小读取文件内容;
当接收到的操作指令为重命名操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若重命名后文件名长度不变,则修改文件头中的相应的文件名,若重命名后文件名长度变短或变长,则将相应的文件名对应的子文件的文件内容及之后的所有子文件前移或后移,修改文件头中的相应的文件名;
若重命名后文件名长度不变,则同步更新条目索引表中的文件名,若重命名后文件名长度变短或变长,则重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对文件内容的编辑操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若编辑后文件内容长度不变,则直接覆盖相应的文件内容,若编辑后文件内容长度变长或变短,则先将相应的文件内容之后所有的CPIO文件后移或前移,再覆盖相应的文件内容;
若编辑后文件内容长度变长或变短,则修改文件头中的文件大小,并重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为新增操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
从CPIO文件的尾部位置开始,存储新的子文件;
根据该子文件的文件头,在条目索引表中增加该子文件的条目。
优选地,所述子文件的形式为文件或子目录,当接收到的操作指令为对文件的内容的删除操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子文件,将该子文件之后的所有子文件前移;
完成前移后重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对子目录的删除操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子目录及其所在条目,将该子目录之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表;
重复如下步骤至查找不到包含删除的子目录的子文件:重新遍历条目索引表,确定子文件的文件名中包含删除的子目录时,删除该子文件,将该子文件之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表。
利用本发明提供的CPIO文件的操作方法及装置具有以下有益效果:
既不依赖cygwin环境,也不受限于NTFS文件系统,便于发布;简化为内存操作和文件流读写,效率更高;通过条目索引表构建类似资源浏览器explorer的人机界面,操作更人性化。
附图说明
图1为CPIO文件的结构示意图;
图2为本发明实施例中CPIO文件的操作方法流程图;
图3为本发明实施例建立的条目索引表示意图;
图4为本发明实施例中CPIO文件的操作装置结构图。
具体实施方式
下面结合附图和实施例对本发明提供的CPIO文件的操作方法及装置进行更详细地说明。
如图1所示,CPIO文件就是一个个的子文件拼接而成,图1中每行代表一个子文件,由文件头header和文件内容content两部分构成。
文件头header包含子文件的一系列属性信息,文件头header结构固定,但大小不固定,因为filename的长度不固定,header中filesize来指定content的长度,还有一个namesize来指定filename的长度。
子文件有两种形式:文件和目录。header中nlink字段用来区分本子文件的形式是文件还是子目录;header中的filesize为0即表示Content为空。
文件头中的模式mode是文件读写和权限属性,Mtime是文件修改时间,其他的还有文件大小、校验值、文件名等。
基于CPIO文件的特点,本发明提供的适于应用于Windows平台的CPIO文件的操作方法,如图2所示,包括:
步骤201,按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
Windows平台自带如下功能:对二进制文件进行解析时,可以识别出相应的文件头,即可以获得header。
将CPIO文件存储到本地磁盘上时,可以获得CPIO文件的起始位置。每个子文件的文件头具有文件大小,因此可以根据文件头中的文件大小获得子文件的相对于起始位置的绝对偏移。
步骤202,按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
本发明实施例中一个子文件对应一个条目,可以理解为一个节点,创建的条目索引表即为子文件索引表,从而可以索引到每个子文件。
本发明实施例基于Windows平台的自带功能,按照二进制文件的解析方式CPIO文件,从而可以获得CPIO格式的子文件的header和绝对偏移offset,从而可以创建能够进行子文件索引的条目索引表。
如图3所示(其中Index即索引),本发明实施例的条目索引表为在header的基础上增加了其对应子文件起始位置的偏移信息offset。
步骤203,每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;
条目的文件头中有文件名,条目的绝对偏移offset反应CPIO文件起始位置的偏移信息,文件头中有该文件的大小,因此可以定位相应的CPIO文件的文件位置。
步骤204,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。
通过文件头header可以获得子文件的目录信息及文件位置信息,从而可以获得CPIO文件包含了哪些子文件及这些子文件的路径信息。
本发明实施例就是先遍历整个CPIO文件,根据每个CPIO文件的文件头header来创建索引表,并记录每个文件条目的绝对偏移,由于header中包含了文件的一系列信息,如子文件的文件名和文件大小,通过绝对偏移可以定位子文件,所以不需要将CPIO文件散开到本地。
利用本发明实施例提供的CPIO文件的操作方法,基于Windows平台自带的二进制文件解析功能,利用在内存中创建的条目索引表能够快速等位需要进行操作的子文件,不需要对CPIO文件进行散开及重新制作,因此提高了效率;由于不需要对CPIO文件进行散开,因此不受限于NTFS文件系统,并且CPIO文件中属性信息不会丢失;由于不依赖cygwin环境,也不受限于NTFS文件系统,便于发布;简化为内存操作和文件流读写,效率更高;通过条目索引表构建类似资源浏览器explorer的人机界面,操作更人性化。
优选地,本发明实施例通过如下任一个或任意多个操作指令完成对CPIO文件的操作:
读操作指令;重命名操作指令;对文件内容的编辑操作指令;删除操作指令;新增操作指令。
如果是通过多个操作指令完成对CPIO文件的操作,每接收到一条操作指令,执行步骤203和步骤204完成该操作指令后,再执行下一条操作指令。
基于上述条目索引表,下面给出不同的操作类型对应的CPIO文件的操作方法优选实施例。
实施例1
本实施例给出当接收到读操作指令时如何操作CPIO文件。
导入包括多个子文件的CPIO文件;
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
当接收到读操作指令时,根据需读取的子文件的文件名,在条目索引表查找是否存在包含该文件名的条目;
若存在则返回True;其它返回False,返回True后根据该条目中的绝对偏移定位需要读取的子文件位置;
从绝对偏移的位置读取文件头,根据文件头中的文件大小读取文件内容。
由于读操作不会改变条目内容,因此不需要更新条目索引表。
实施例2
本实施例给出当接收到重命名操作指令时如何操作CPIO文件。
导入包括多个子文件的CPIO文件;
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
当接收到重命名操作指令时,在header中查找是否存在需重命名的子文件;
若存在则返回True;其它返回False,返回True后判断重命名后文件名长度是否会变;
若重命名后文件名长度不变,则修改磁盘上header中的相应的文件名,同步更新条目索引表中的文件名;
若重命名后文件名长度变短或变长,则将相应的文件名对应的子文件的文件内容及之后的所有子文件前移或后移,修改文件头中的相应的文件名,重新遍历CPIO文件更新内存中的条目索引表。
进一步地,在修改子文件时,还可以计算修改后的子文件的校验和以保证数据的完整性和一致性,根据计算的校验和调整尾部填充。
实施例3
本实施例给出当接收到对文件内容的编辑操作指令时如何操作CPIO文件。
导入包括多个子文件的CPIO文件;
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
当接收到对文件内容的编辑操作指令时,在header中查找是否存在需修改的子文件;
若存在则返回True;其它返回False,返回True后判断编辑后文件内容长度是否改变;
若编辑后文件内容长度不变,则直接覆盖相应的文件内容,不需要更新条目索引表;
若编辑后文件内容长度变长或变短,则先将相应的文件内容之后所有的子文件的后移或前移,再覆盖相应的文件内容,修改文件头中的文件大小,并重新遍历CPIO文件更新内存中的条目索引表。
实施例4
本实施例中子文件的形式为文件,具体可以根据header中nlink字段来区分是文件还是子目录,下面给出当接收到对文件的内容的删除指令时如何操作CPIO文件。
导入包括多个子文件的CPIO文件;
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
当接收到对文件的内容的删除指令时,在header中查找是否存在需删除的子文件;
若存在则返回True;其它返回False,返回True后删除相应位置的子文件,将该子文件之后的所有子文件前移;
完成前移后确定操作后条目改变,重新遍历CPIO文件更新内存中的条目索引表。
实施例5
本实施例中子文件的形式为子目录,具体可以根据header中nlink字段来区分是文件还是目录,下面给出当接收到对子目录的删除指令时如何操作CPIO文件。
删除子目录时要将该目录以及其下的所有子文件和子目录删除。
举个例子:现有一个CPIO文件,包含多个子文件和子目录,其文件名filename如下:
(nlink=2)res
(nlink=2)res/images
(nlink=2)res/images/charger
(nlink=1)res/images/charger/battery_0.png
(nlink=1)res/images/charger/battery_2.png
(nlink=1)res/images/charger/battery_5.png
(nlink=1)res/images/charger/battery_4.png
(nlink=1)res/images/charger/battery_fail.png
(nlink=1)res/images/charger/battery_charge.png
(nlink=1)res/images/charger/battery_3.png
(nlink=1)res/images/charger/battery_1.png
……
nlink=2表示该子文件是不包括文件内容的子目录,nlink=1则表示该子文件是包括文件内容的子文件。
导入包括多个子文件的CPIO文件;
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
当接收到对子目录的删除指令时,在header中查找是否存在需删除的子文件;
若存在则返回True;其它返回False,返回True后删除相应位置的子目录及其所在条目,将该子目录之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表;
重复如下步骤至查找不到包含删除的子目录的子文件:重新遍历条目索引表,确定子文件的文件名中包含删除的子目录时,删除该子文件,将该子文件之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表。
即如果要删除res/images这个目录,则要将res/images(子目录)、res/images/charger(子目录)、res/images/charger/*.*(子文件)都删除,具体执行:
步骤1,先删除指定的目录res/images所在的条目,然后将后面的所有条目前移,并重建索引表;
步骤2,重新遍历索引表,匹配每个条目的filename,如果包含res/images这个路径,就删之,然后将后面的所有条目前移,并重建索引表
步骤3,重复执行步骤2查找不到包含res/images这个路径的条目。
实施例6
本实施例中操作类型为新增操作。
导入包括多个子文件的CPIO文件;
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
根据最后一个条目中文件头中文件的大小及绝对偏移,定位CPIO文件的尾部位置为需要进行操作的子文件位置;
从CPIO文件的尾部位置开始,存储新的子文件;
根据该子文件的文件头,在条目索引表中增加该子文件的条目。
进一步地,在存储新的子文件时,还可以计算新的子文件的校验和以保证数据的完整性和一致,根据计算的校验和调整尾部填充。
优选地,在上述实施例中修改或新增子文件时,文件版本、访问权限等属性可由用户指定。
显然,本方案既不依赖cygwin环境,也不受限于NTFS文件系统,简化为内存操作和文件流读写,效率更高;而且,通过条目索引表可以方便的构建类似资源浏览器explorer的人机界面,用户操作更人性化。
基于同一发明构思,本发明实施例中还提供了一种适于应用于Windows平台的CPIO文件的操作装置,由于该装置解决问题的原理与一种CPIO文件的操作方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
一种CPIO文件的操作装置,如图4所示,包括:
解析单元401,用于按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
索引建立单元402,用于按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
定位单元403,用于每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;
操作及索引更新单元404,用于对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。
可选地,所述定位单元和操作及索引更新单元通过如下任一个或任意多个操作指令完成对CPIO文件的操作:
读操作指令;重命名操作指令;对文件内容的编辑操作指令;删除操作指令;新增操作指令。
可选地,当定位单元接收到操作指令为读操作指令或重命名操作指令或对文件内容的编辑操作指令或删除操作指令时,定位需要进行操作的子文件的位置,具体包括:
根据需要进行操作的子文件的文件名,在条目索引表查找到包含该文件名的条目,根据该条目中的绝对偏移定位需要进行操作的子文件位置;
当定位单元接收到的操作指令为新增操作指令,定位需要进行操作的子文件的位置,具体包括:
根据最后一个条目中文件头中文件的大小及绝对偏移,定位CPIO文件的尾部位置为需要进行操作的子文件位置。
可选地,当定位单元接收到的操作指令为读操作指令时,确定操作后条目不会改变,对相应位置的子文件进行操作,具体包括:
从绝对偏移的位置读取文件头,根据文件头中的文件大小读取文件内容;
当接收到的操作指令为重命名操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若重命名后文件名长度不变,则修改文件头中的相应的文件名,若重命名后文件名长度变短或变长,则将相应的文件名对应的子文件的文件内容及之后的所有子文件前移或后移,修改文件头中的相应的文件名;
若重命名后文件名长度不变,则同步更新条目索引表中的文件名,若重命名后文件名长度变短或变长,则重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对文件内容的编辑操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若编辑后文件内容长度不变,则直接覆盖相应的文件内容,若编辑后文件内容长度变长或变短,则先将相应的文件内容之后所有的CPIO文件后移或前移,再覆盖相应的文件内容;
若编辑后文件内容长度变长或变短,则修改文件头中的文件大小,并重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为新增操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
从CPIO文件的尾部位置开始,存储新的子文件;
根据该子文件的文件头,在条目索引表中增加该子文件的条目。
可选地,所述子文件的形式为文件或子目录,当接收到的操作指令为对文件的内容的删除操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子文件,将该子文件之后的所有子文件前移;
完成前移后重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对子目录的删除操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子目录及其所在条目,将该子目录之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表;
重复如下步骤至查找不到包含删除的子目录的子文件:重新遍历条目索引表,确定子文件的文件名中包含删除的子目录时,删除该子文件,将该子文件之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种CPIO文件的操作方法,其特征在于,包括:
按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;
对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。
2.如权利要求1所述的方法,其特征在于,通过如下任一个或任意多个操作指令完成对CPIO文件的操作:
读操作指令;重命名操作指令;对文件内容的编辑操作指令;删除操作指令;新增操作指令。
3.如权利要求2所述的方法,其特征在于,当接收到操作指令为读操作指令或重命名操作指令或对文件内容的编辑操作指令或删除操作指令时,定位需要进行操作的子文件的位置,具体包括:
根据需要进行操作的子文件的文件名,在条目索引表查找到包含该文件名的条目,根据该条目中的绝对偏移定位需要进行操作的子文件位置;
当接收到的操作指令为新增操作指令,定位需要进行操作的子文件的位置,具体包括:
根据最后一个条目中文件头中文件的大小及绝对偏移,定位CPIO文件的尾部位置为需要进行操作的子文件位置。
4.如权利要求2或3所述的方法,其特征在于,当接收到的操作指令为读操作指令时,确定操作后条目不会改变,对相应位置的子文件进行操作,具体包括:
从绝对偏移的位置读取文件头,根据文件头中的文件大小读取文件内容;
当接收到的操作指令为重命名操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若重命名后文件名长度不变,则修改文件头中的相应的文件名,若重命名后文件名长度变短或变长,则将相应的文件名对应的子文件的文件内容及之后的所有子文件前移或后移,修改文件头中的相应的文件名;
若重命名后文件名长度不变,则同步更新条目索引表中的文件名,若重命名后文件名长度变短或变长,则重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对文件内容的编辑操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若编辑后文件内容长度不变,则直接覆盖相应的文件内容,若编辑后文件内容长度变长或变短,则先将相应的文件内容之后所有的CPIO文件后移或前移,再覆盖相应的文件内容;
若编辑后文件内容长度变长或变短,则修改文件头中的文件大小,并重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为新增操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
从CPIO文件的尾部位置开始,存储新的子文件;
根据该子文件的文件头,在条目索引表中增加该子文件的条目。
5.如权利要求2或3所述的方法,其特征在于,所述子文件的形式为文件或子目录,当接收到的操作指令为对文件的内容的删除操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子文件,将该子文件之后的所有子文件前移;
完成前移后重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对子目录的删除操作指令时,对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子目录及其所在条目,将该子目录之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表;
重复如下步骤至查找不到包含删除的子目录的子文件:重新遍历条目索引表,确定子文件的文件名中包含删除的子目录时,删除该子文件,将该子文件之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表。
6.一种CPIO文件的操作装置,其特征在于,包括:
解析单元,用于按照二进制文件的解析方式遍历包括多个子文件的CPIO文件,识别并记录每个子文件的文件头及该子文件相对于CPIO文件起始位置的绝对偏移,所述文件头包括子文件的文件名及文件大小;
索引建立单元,用于按照子文件的顺序在内存中创建包括多个条目的条目索引表,其中每一个条目包括一个子文件的文件头及绝对偏移;
定位单元,用于每次接收到操作指令时,根据内存中的条目索引表,定位需要进行操作的子文件的位置;
操作及索引更新单元,用于对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表。
7.如权利要求6所述的装置,其特征在于,所述定位单元和操作及索引更新单元通过如下任一个或任意多个操作指令完成对CPIO文件的操作:
读操作指令;重命名操作指令;对文件内容的编辑操作指令;删除操作指令;新增操作指令。
8.如权利要求7所述的装置,其特征在于,当定位单元接收到操作指令为读操作指令或重命名操作指令或对文件内容的编辑操作指令或删除操作指令时,定位需要进行操作的子文件的位置,具体包括:
根据需要进行操作的子文件的文件名,在条目索引表查找到包含该文件名的条目,根据该条目中的绝对偏移定位需要进行操作的子文件位置;
当定位单元接收到的操作指令为新增操作指令,定位需要进行操作的子文件的位置,具体包括:
根据最后一个条目中文件头中文件的大小及绝对偏移,定位CPIO文件的尾部位置为需要进行操作的子文件位置。
9.如权利要求7或8所述的装置,其特征在于,当定位单元接收到的操作指令为读操作指令时,确定操作后条目不会改变,对相应位置的子文件进行操作,具体包括:
从绝对偏移的位置读取文件头,根据文件头中的文件大小读取文件内容;
当接收到的操作指令为重命名操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若重命名后文件名长度不变,则修改文件头中的相应的文件名,若重命名后文件名长度变短或变长,则将相应的文件名对应的子文件的文件内容及之后的所有子文件前移或后移,修改文件头中的相应的文件名;
若重命名后文件名长度不变,则同步更新条目索引表中的文件名,若重命名后文件名长度变短或变长,则重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对文件内容的编辑操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
若编辑后文件内容长度不变,则直接覆盖相应的文件内容,若编辑后文件内容长度变长或变短,则先将相应的文件内容之后所有的CPIO文件后移或前移,再覆盖相应的文件内容;
若编辑后文件内容长度变长或变短,则修改文件头中的文件大小,并重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为新增操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
从CPIO文件的尾部位置开始,存储新的子文件;
根据该子文件的文件头,在条目索引表中增加该子文件的条目。
10.如权利要求7或8所述的装置,其特征在于,所述子文件的形式为文件或子目录,当接收到的操作指令为对文件的内容的删除操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子文件,将该子文件之后的所有子文件前移;
完成前移后重新遍历CPIO文件更新内存中的条目索引表;
当接收到的操作指令为对子目录的删除操作指令时,操作及索引更新单元对相应位置的子文件进行操作,当确定操作后条目改变时,更新内存中的条目索引表,具体包括:
删除相应位置的子目录及其所在条目,将该子目录之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表;
重复如下步骤至查找不到包含删除的子目录的子文件:重新遍历条目索引表,确定子文件的文件名中包含删除的子目录时,删除该子文件,将该子文件之后的所有子文件前移,完成前移后确定操作后条目改变并更新内存中的条目索引表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410143816.XA CN104978355B (zh) | 2014-04-10 | 2014-04-10 | 一种cpio文件的操作方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410143816.XA CN104978355B (zh) | 2014-04-10 | 2014-04-10 | 一种cpio文件的操作方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104978355A true CN104978355A (zh) | 2015-10-14 |
CN104978355B CN104978355B (zh) | 2018-09-25 |
Family
ID=54274869
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410143816.XA Active CN104978355B (zh) | 2014-04-10 | 2014-04-10 | 一种cpio文件的操作方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104978355B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106686078A (zh) * | 2016-12-26 | 2017-05-17 | 北汽福田汽车股份有限公司 | 数据传输方法及装置 |
CN113434468A (zh) * | 2021-06-01 | 2021-09-24 | 武汉天喻信息产业股份有限公司 | 文件存储方法、装置、设备及可读存储介质 |
CN117271440A (zh) * | 2023-11-21 | 2023-12-22 | 深圳市云希谷科技有限公司 | 一种基于freeRTOS文件信息存储方法、读取方法及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040006579A1 (en) * | 2000-08-08 | 2004-01-08 | Jun Hikita | Data recording device, data recording method, data reproducing device and data reproducing method |
CN101986266A (zh) * | 2010-10-22 | 2011-03-16 | 浙江大学 | Android手机操作系统移植到凌动处理器开发板的方法 |
CN102033766A (zh) * | 2010-12-01 | 2011-04-27 | 北京同有飞骥科技股份有限公司 | 一种存储操作系统的升级方法 |
-
2014
- 2014-04-10 CN CN201410143816.XA patent/CN104978355B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040006579A1 (en) * | 2000-08-08 | 2004-01-08 | Jun Hikita | Data recording device, data recording method, data reproducing device and data reproducing method |
CN101986266A (zh) * | 2010-10-22 | 2011-03-16 | 浙江大学 | Android手机操作系统移植到凌动处理器开发板的方法 |
CN102033766A (zh) * | 2010-12-01 | 2011-04-27 | 北京同有飞骥科技股份有限公司 | 一种存储操作系统的升级方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106686078A (zh) * | 2016-12-26 | 2017-05-17 | 北汽福田汽车股份有限公司 | 数据传输方法及装置 |
CN106686078B (zh) * | 2016-12-26 | 2020-03-24 | 北汽福田汽车股份有限公司 | 数据传输方法及装置 |
CN113434468A (zh) * | 2021-06-01 | 2021-09-24 | 武汉天喻信息产业股份有限公司 | 文件存储方法、装置、设备及可读存储介质 |
CN113434468B (zh) * | 2021-06-01 | 2023-02-28 | 武汉天喻信息产业股份有限公司 | 文件存储方法、装置、设备及可读存储介质 |
CN117271440A (zh) * | 2023-11-21 | 2023-12-22 | 深圳市云希谷科技有限公司 | 一种基于freeRTOS文件信息存储方法、读取方法及相关设备 |
CN117271440B (zh) * | 2023-11-21 | 2024-02-06 | 深圳市云希谷科技有限公司 | 一种基于freeRTOS文件信息存储方法、读取方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104978355B (zh) | 2018-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20070276848A1 (en) | Apparatus and method for managing data | |
US11068441B2 (en) | Caseless file lookup in a distributed file system | |
Davison et al. | Sumatra: a toolkit for reproducible research | |
CN103870588B (zh) | 一种在数据库中使用的方法及装置 | |
US20140324873A1 (en) | Method, device and recording medium for managing application icon | |
US20140108475A1 (en) | Migration-destination file server and file system migration method | |
CN102520995B (zh) | 软件远程流式加载方法及系统 | |
KR102088164B1 (ko) | 소프트웨어 업데이트를 위한 신구 데이터간의 차분 생성 방법 및 그 장치 | |
US10212067B2 (en) | Dynamic symbolic links for referencing in a file system | |
US10909086B2 (en) | File lookup in a distributed file system | |
CN106874357B (zh) | 一种Web应用的资源定制方法和装置 | |
CN114721783B (zh) | 资源文件提取方法、装置、电子设备及存储介质 | |
CN104978355A (zh) | 一种cpio文件的操作方法及装置 | |
CN113688139B (zh) | 对象存储方法、网关、设备及介质 | |
CN106777097B (zh) | 一种元数据分层扩展时的合并方法 | |
EP2884408A1 (en) | Content management systems for content items and methods of operating content management systems | |
WO2019041891A1 (zh) | 升级包的生成方法及装置 | |
US7814079B2 (en) | Apparatus and method for managing file | |
CN105051731A (zh) | 针对优化的文件操作对文件进行分组 | |
WO2023201002A1 (en) | Implementing graph search with in-structure metadata of a graph-organized file system | |
US11003650B2 (en) | Container-image reproduction and debugging | |
KR20210037774A (ko) | 지도를 위한 파일 관리 방법 | |
CN111142741A (zh) | 一种文件整理方法及终端、计算机可读存储介质 | |
US12001481B2 (en) | Graph-organized file system | |
US20230334093A1 (en) | Graph-organized file system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 519085 High-tech Zone, Tangjiawan Town, Zhuhai City, Guangdong Province Patentee after: ACTIONS TECHNOLOGY Co.,Ltd. Address before: 519085 High-tech Zone, Tangjiawan Town, Zhuhai City, Guangdong Province Patentee before: ACTIONS (ZHUHAI) TECHNOLOGY Co.,Ltd. |