CN107992504A - 一种文件处理方法及装置 - Google Patents
一种文件处理方法及装置 Download PDFInfo
- Publication number
- CN107992504A CN107992504A CN201610969538.2A CN201610969538A CN107992504A CN 107992504 A CN107992504 A CN 107992504A CN 201610969538 A CN201610969538 A CN 201610969538A CN 107992504 A CN107992504 A CN 107992504A
- Authority
- CN
- China
- Prior art keywords
- file
- file handle
- handle
- chained list
- sequential chained
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
- G06F16/152—File search processing using file content signatures, e.g. hash values
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Library & Information Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种文件处理方法,包括:接收对文件的操作命令;响应所述操作命令,利用所述文件的文件名,在链表中查找对应的文件句柄;所述链表表征处于有效状态的文件句柄资源;利用查找到的文件句柄,对所述文件进行读或写操作。本发明同时还公开了一种文件处理装置。
Description
技术领域
本发明涉及文件***,尤其涉及一种文件处理方法及装置。
背景技术
文件句柄是操作文件时唯一的标识,文件句柄是与文件名一一对应的文件索引或编号。
在一般的文件***中,对文件句柄的操作,一般都是:打开文件得到文件句柄,然后根据文件句柄去读或写文件,最后使用完关闭文件句柄。
这种操作方式存在以下缺陷:
第一,这种操作方式需要用户去操作文件句柄,不方便用户使用。
第二,采用上述操作方式,对于同一个文件的操作,需要反复执行上述操作,使得输入/输出(I/O,Input/Output)性能十分低下。
发明内容
为解决现有存在的技术问题,本发明实施例提供一种文件处理方法及装置。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种文件处理方法,包括:
接收对文件的操作命令;
响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;
利用查找到的文件句柄,对所述文件进行读或写操作。
上述方案中,利用所述文件的文件名,在表链中查找对应的文件句柄,包括:
利用所述文件的全路径名生成哈希值;
利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;
利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄。
上述方案中,所述有序链表的结构为双向链表结构、或为红黑树结构。
上述方案中,所述方法还包括:
查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息。
上述方案中,所述方法还包括:
基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄。
上述方案中,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,包括:
定时器超时后,利用所述哈希表查找对应的有序链表;
对查找到的有序链表遍历每个节点,根据节点信息中的访问时间及当前时间,判断是否需要对节点对应的文件句柄进行资源回收。
上述方案中,所述方法还包括:
查找到对应的文件句柄后,将文件句柄的使用次数进行更新;
相应地,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,包括:
根据更新后的文件句柄的使用次数,判断是否需要对节点对应的文件句柄进行资源回收。
上述方案中,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,包括:
根据是否获取到所述操作命令对应进程所释放的信号量,判断是否需要对节点对应的文件句柄进行资源回收。
上述方案中,所述方法还包括:
当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至所述表链中;
相应地,利用获取的文件句柄对所述文件进行读或写操作。
本发明实施例还提供了一种文件处理装置,包括:
接收单元,用于接收对文件的操作命令;
查找单元,用于响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;
操作单元,用于利用查找到的文件句柄,对所述文件进行读或写操作。
上述方案中,所述查找单元,具体用于:
利用所述文件的全路径名生成哈希值;
利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;
利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄。
上述方案中,所述装置还包括:
添加单元,用于查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息。
上述方案中,所述装置还包括:
维护单元,用于基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄。
上述方案中,所述查找单元,还用于当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至表链中;
相应地,所述操作单元,用于利用获取的文件句柄对所述文件进行读或写操作。
本发明实施例提供的文件处理方法及装置,接收对文件的操作命令;响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;利用查找到的文件句柄,对所述文件进行读或写操作,利用表链的方式来得到对应的文件句柄,当文件句柄已经被打开后,不需要再次打开文件去得到对应的文件句柄,如此,减少了文件代开和关闭的次数,从而有效地减少了I/O操作,提高了对文件***操作的速度。
附图说明
在附图(其不一定是按比例绘制的)中,相似的附图标记可在不同的视图中描述相似的部件。具有不同字母后缀的相似附图标记可表示相似部件的不同示例。附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。
图1为本发明实施例一文件处理方法流程示意图;
图2为本发明实施例一种有序链表结构示意图;
图3为本发明实施例一种有序链表结构示意图;
图4为本发明实施例提供的方案应用在整个***中的位置示意图;
图5为本发明实施例二表链结构示意图;
图6为本发明实施例二文件句柄处理的过程示意图;
图7为采用本发明实施例方案的I/O速度统计结果示意图;
图8为采用相关技术方案的I/O速度统计结果示意图;
图9为本发明实施例对文件句柄资源的关闭管理过程示意图;
图10为本发明实施例三文件处理装置结构示意图。
具体实施方式
下面结合附图及实施例对本发明再作进一步详细的描述。
文件句柄的含义就是操作文件时唯一的标识。在一般的文件***中,对文件句柄的操作,基本上都是类似于:打开文件得到文件句柄,然后根据文件句柄去读或写文件,使用完后关闭文件句柄。
举个例子来说,用户需要从有锁的抽屉中取东西或放入东西,此时,首先用户需要找到这个抽屉的钥匙,有了要钥匙,用户就可以打开抽屉,然后就能从抽屉中取东西或放东西,最后用户需要关闭抽屉,这是因为钥匙数量是有限的,钥匙摆好,其他人才能找到钥匙再用。所以文件句柄,就相当于抽屉的钥匙。
而目前这一些系列文件句柄的操作十分复杂,需要用户去操作和管理文件句柄。具体来说,首先,需要用户去打开文件以获得文件句柄,然后需要用户去保存文件句柄,并维护文件句柄,以保证文件句柄不能篡改或丢失,最后当使用完毕后需要用户主动去释放文件句柄。
其中,释放文件句柄的原因是:在文件***中,文件句柄也是一种有限的资源,不释放就会被一直占用,当未被释放的文件句柄数量累积到一定程度后,就打不开文件了,同时也会占用大量内存。
另一方面,对于上述对文件句柄的操作,从对文件操作的角度来说,使用时需要打开文件得到文件句柄,通过文件句柄读或写数据,使用完毕后关闭文件句柄。那么,对于同一个文件的操作,常常会反复如此操作,从而使得IO性能十分低下。
另外,在上述对文件句柄的操作中关闭文件句柄的方式是异步关闭方式,这种关闭方式常常会导致文件句柄没有关闭,或文件句柄被遗失(由用户维护文件句柄)。
基于此,在本发明的各种实施例中:接收对文件的操作命令;响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;利用查找到的文件句柄,对所述文件进行读或写操作。
实施例一
本发明实施例提供的文件处理方法,如图1所示,该方法包括以下步骤:
步骤101:接收对文件的操作命令;
这里,所述操作命令是指:用户对文件的读或写命令。
步骤102:响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;
这里,所述表链表征处于有效状态的文件句柄资源,即表征目前能够使用的文件句柄资源。
具体地,利用所述文件的全路径名生成哈希值;
利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;
利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄。
这里,所述有序链表的节点之间是有序的,这种有序可以通过每个节点的节点信息包含下一个和前一个节点的指针来体现。
实际应用时,如图2所示,所述有序链表的结构为双向链表结构,还可以是如图3所示的红黑树结构。
在一实施例中,该方法还可以包括:
查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息。
实际应用时,还需要对所述有序链表中的文件句柄进行管理,以便关闭相应的文件句柄资源,即释放文件句柄资源。
基于此,在一实施例中,该方法还可以包括:
基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄(关闭文件句柄对应的文件)。
这里,实际应用时,所述文件句柄维护策略可以根据需要来设置。一般,可以通过定时器、文件句柄使用次数计数、信号量的释放等事件驱动机制,来实现对文件句柄关闭的管理。
其中,当基于定时器事件驱动机制实现对文件句柄关闭的管理时,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,具体包括:
定时器超时后,利用所述哈希表查找对应的有序链表;
对查找到的有序链表遍历每个节点,根据节点信息中的访问时间及当前时间,判断是否需要对节点对应的文件句柄进行资源回收。
具体地,当访问时间及当前时间的差值超过设置的标准值时,确定需要对节点对应的文件句柄进行资源回收。
当基于文件句柄使用次数计数事件驱动机制实现对文件句柄关闭的管理时,该方法还可以包括:
查找到对应的文件句柄后,将文件句柄的使用次数进行更新;
相应地,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,具体包括:
根据更新后的文件句柄的使用次数,判断是否需要对节点对应的文件句柄进行资源回收。
具体地,当使用次数达到设定次数,或者在预设时长内使用次数低于设定次数时,确定需要对节点对应的文件句柄进行资源回收。
当基于信号量的释放事件驱动机制实现对文件句柄关闭的管理时,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,具体包括:
根据是否获取到所述操作命令对应进程所释放的信号量,判断是否需要对节点对应的文件句柄进行资源回收。
其中,当获取到所述操作命令对应进程所释放的信号量时,确定需要对节点对应的文件句柄进行资源回收。
步骤103:利用查找到的文件句柄,对所述文件进行读或写操作。
这里,实际应用时,当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至所述表链中;相应地,利用获取的文件句柄对所述文件进行读或写操作。
具体地,利用获取的文件句柄、文件全路径名以及当前时间生成新的节点信息,并将新的节点信息添加至所述有序链表中。
本发明实施例提供的文件处理方法,接收对文件的操作命令;响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;利用查找到的文件句柄,对所述文件进行读或写操作,利用表链的方式来得到对应的文件句柄,当文件句柄已经被打开后,不需要再次打开文件去得到对应的文件句柄,如此,减少了文件代开和关闭的次数,从而有效地减少了I/O操作,提高了对文件***操作的速度。
另外,利用所述文件的全路径名生成哈希值;利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄,利用哈希表和有序链表结合的方式,可以快速地查找到对应的文件句柄。而且,有序链表的节点之间是有序的,这样,可以快速地对链表中的节点对应的文件句柄进行关闭管理。
除此以外,基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄,自动实现对文件句柄资源的释放管理,无需用户参与,如此,降低了异步关闭文件的风险,避免了忘记关闭文件句柄或者多次关闭同一个文件句柄情况的发生。
查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息;当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至所述表链中,这样,可以有效地防止文件句柄的丢失。
实施例二
在实施例一的基础上,本实施例详细描述如何获得文件句柄、以及对打开的文件句柄的管理过程。
图4示出了本发明实施例提供的方案应用在整个***中的位置。从图4中可以看出,本发明实施例方案的实现层位于文件***上层,这样在使用时可以屏蔽文件***的差异,使应用(本发明实施例的方案)具有很好的移植特性,同时使应用的焦点聚焦到对应用的实现上,用户无须对文件句柄进行操作和管理。
在本发明实施例中,为了管理和查找文件句柄,如图5所示,采用了表链结合的方式。这是考虑到:首先,采用哈希值的方式可以快速地查找到对应的文件句柄。其次,实际应用时,***作的文件很多,如果***作的文件信息都保存在哈希表中,就可能需要一个无限大小的哈希表来存取需要的信息(各文件对应的文件句柄),在实现上是非常困难的。因此,只能建立有限大小的哈希表,同时,为了实现对信息的保存和取得,本发明实施例将有限的哈希表的每项用作一个有序链表的头,可以把包含开文件句柄、文件全路径名及访问的时间标记的信息(节点信息)作为有序链表的项(节点),按照文件名排序存入有序链表中。
需要说明的是:实际应用时,可以在哈希表和有序链表的操作之间设置一个互斥量,以保证线程的安全。
其中,对于有序链表,其结构可以为图2所示的双向链表结构,也可以是为图3所示的红黑树结构。
这里,为了实现快速搜索文件句柄,高效地***和删除表项,减少内存和时间占用,本发明实施例采用了有序链表。
有序链表每项的内容(节点信息)包括:文件打开的文件句柄、文件全路径名、访问时间、下一个节点的指针及前一个节点的指针。
实际应用时,当进程初始化时,创建哈希表(根据***作的文件全路径名来生成哈希值,从而得到哈希表);然后,利用创建的哈希表的表项作为有序链表的头,来保存包含打开的文件句柄(打开文件,从文件中读取文件句柄)、文件全路径及访问时间的信息。
其中,当进程销毁时,销毁该哈希表,也就是说,当进程销毁时,哈希表也就不存在了。
下面描述使用文件句柄的过程。
如图6所示,文件句柄的使用过程主要包括以下步骤:
步骤601:文件被开始操作;
步骤602:根据接收的参数,判断是否需要缓存文件句柄;如果是,则执行步骤603,否则执行步骤610;
这里,实际应用时,当文件被开始操作,即进程接收到操作指令时,会得到对***作文件的一些参数,比如读写次数等,据此来判断是否需要缓存文件句柄。
当不需要缓存文件句柄时,则按照通用的流程去处理,即执行步骤610~612。
步骤603:查找表链;
具体地,根据***作文件的全路径名生成哈希值,利用哈希值在哈希表中找到有序链表的头,再比较有序链表项中的文件全路径名,来查看是否有对应的项。
步骤604:判断是否查找到对应的文件句柄,如果是,则执行步骤607,否则执行步骤605;
步骤605:打开文件,获得文件句柄;
步骤606:将文件全路径名及得到的文件句柄作为节点信息;
步骤607:在节点信息中设置当前时间;
这里,当在表链中未查找到对应的文件句柄时,需要在节点信息中直接添加当前时间信息;当在表链中查找到对应的文件句柄时,需要将节点信息中的访问时间信息修改为当前时间信息。
步骤608:将节点信息存储有序链表中;
步骤609:利用文件句柄对文件进行写或读的操作,之后执行步骤613;
这里,步骤604~609中,如果得到的文件句柄是无效的,可以再次生成有效的节点信息,具体包括:打开文件获得文件句柄,保存文件句柄及修改访问时间标记为当前时间,将得到的节点信息再保存到表项中。
步骤610:打开文件,得到文件句柄;
步骤611:利用文件句柄对***作文件进行读写操作;
步骤612:操作完成后,关闭文件以释放文件句柄,之后执行步骤513;
步骤613:结束当前处理过程。
从上面的描述中可以看出,整个过程用户是不对文件句柄进行管理的,实现了文件句柄对用户的屏蔽。同时,还是先了文件操作具体函数对用户的屏蔽。通过一次打开文件句柄,实现了对文件的多次读写,如此,有效地减少了I/O操作,提高了对文件***操作的速度(大大提高了I/O效率)。
同时,为了说明采用本发明实施例的方案可以大大提高I/O效率,对采用本发明实施例的方案的I/O速度和采用现有方案的I/O速度进行了统计。图7示出了采用现有方案的I/O速度统计结果,图8示出了采用本发明实施例方案的I/O速度统计结果。其中,现有方案是:打开文件,获得文件句柄,利用文件句柄操作文件,最后关闭文件以释放文件句柄,当需要再次操作文件时,重新执行打开、操作及关闭这三个操作。同样。而本发明实施例的方案是:对文件操作时,一次打开文件,获得文件句柄,利用文件句柄多次对文件进行读写操作。在图7和8中,横轴为时间(单位为分钟),竖轴为tps。从图7和图8中可以看出,当采用现有方案的I/O速度大概为400tps,也就是说每分钟可以接受大约400个写操作,而采用本发明实施例方案的I/O速度大概为1200tps,也就是说每分钟可以接受大约1200个写处理。这个比较结果充分说明了采用本发明实施例的方案可以大大提高I/O效率。
利用本发明实施例的方案还可实现对文件句柄资源的关闭管理。
本实施例以定时器事件机制来描述如何实现对文件句柄资源的关闭管理。如图9所示,该过程包括以下步骤:
步骤901:进程初始化时,设置定时器时长,并启动定时器,当定时器超时后,触发执行步骤902;
步骤902:开始遍历整个哈希表,得到有序链表的头;
步骤903:通过有序链表的头,开始遍历每个链表项(遍历每个节点),根据访问时间和当前时间差值,来判断是否关闭对应的文件句柄,如果是,则执行步骤904,否则,执行步骤906;
具体地,通过判断差值是否超过设置的标准值来判断是否关闭对应的文件句柄,当差值超过设置的标准值时,需要关闭对应的文件句柄。
步骤904:删除节点信息或将该节点信息置为无效,之后执行步骤905;
步骤905:关闭文件句柄,之后执行步骤906;
这里,关闭文件句柄就是指释放文件句柄。
步骤906:判断遍历链表是否结束,如果是,则执行步骤907,否则,执行步骤903;
步骤907:判断遍历整个哈希表是否结束,如果是,则执行步骤908,否则执行步骤902;
步骤908:再次启动定时器,完成处理。
通过上述步骤,就实现了文件句柄资源的释放或销毁,不让文件句柄资源被浪费。
通过定时器不同时长的设置,可以适应不同用户访问量对文件句柄需求的影响,达到文件句柄资源的最优化使用。最后,也达到了I/O读写效率的提升。
综上所述,本发明实施例通过利用表及链或树等一些技术,实现了文件打开、文件句柄保存到链或树中;需要读或写对应的文件时,通过查找表及链或树的方法得到文件句柄,对文件进行读写。
另外,通过定时器,句柄使用次数计数或信号量等事件触发机制,来触发对文件句柄关闭的管理。换句话说,在触发机制中,可以根据释放量及最少使用此时、超时释放等方案来释放已经打开的文件句柄。
举个例子来说,假设用户要读文件,文件全路径名为/home/test/test.txt.,通过本发明实施例的方案,调用读的接口,在这个过程中:
第一步,利用文件全路径名生成的哈希值查找进程初始化时建立的哈希表,找到对应的有序链表的头,再对比文件全路径名,找到对应的项,从中取得文件句柄;如果明找不到对应的项,再打开文件,得到文件句柄,然后保存文件句柄及文件全路径名到一个项中,存入有序链表中。
第二步,通过文件句柄,取得文件对应的数据,返回给用户。
重复前两步,如此循环,多次操作文件,进行读取。
需要说明的是:此过程文件只需打开一次,提高了文件I/O操作的效率。
另外,通过定时器、或文件句柄使用次数计数或信号量等事件驱动机制,来触发对文件句柄关闭的管理,对应可以关闭某个时间段前没有使用的文件句柄、关闭最老的文件句柄或者关闭完成的文件句柄,从而达到关闭文件句柄的目的,不让文件句柄资源被永久占用,即文件句柄不会丢失而会被关闭。同时在表项中删除该项,不会出现多次关闭同一文件句柄的情况。
整个过程中,用户无需关心和知道文件句柄是否存在,如何操作。用户感觉简单易用。
同时,无需多次打开和关闭文件,尽量减少了文件打开和关闭的次数,减少了I/O操作,I/O的读写效率极大提高,从而。
在现有的方案中,文件打开,需要调用***接口,首先需要切换到***模式,保存上下文,需要耗时,然后需要查找文件节点,分配空间,比较句柄数量是否达到最大值等,都需要耗时,最后返回句柄给用户态,也需要耗时,所以文件打开是个耗时的过程。同时文件关闭,同样,首先要切换到***模式,消除标记,释放使用资源等等,最后返回状态给用户,都是个耗时的过程。而文件句柄的查找过程,相对于这两个过程耗时,就可忽略不记了。
另外,本发明实施例关闭文件句柄资源的机制降低了异步关闭文件的风险,包括:文件句柄的丢失、用户忘记关闭文件句柄的、用户多次关闭同一文件句柄等。
实施例三
为实现本发明实施例的方法,本实施例提供一种文件处理装置,如图10所示,该装置包括:
接收单元101,用于接收对文件的操作命令;
查找单元102,用于响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;
操作单元103,用于利用查找到的文件句柄,对所述文件进行读或写操作。
这里,所述操作命令是指:用户对文件的读或写命令。
所述表链表征处于有效状态的文件句柄资源,是指:所述表链表征目前能够使用的文件句柄资源。
所述查找单元102,具体用于:
利用所述文件的全路径名生成哈希值;
利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;
利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄。
这里,所述有序链表的节点之间是有序的,这种有序可以通过每个节点的节点信息包含下一个和前一个节点的指针来体现。
实际应用时,如图2所示,所述有序链表的结构为双向链表结构,还可以是如图3所示的红黑树结构。
在一实施例中,该装置还可以包括:
添加单元,用于查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息。
实际应用时,还需要对所述有序链表中的文件句柄进行管理,以便关闭相应的文件句柄资源,即释放文件句柄资源。
基于此,在一实施例中,该装置还可以包括:
维护单元,用于基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄(关闭文件句柄对应的文件)。
这里,实际应用时,所述文件句柄维护策略可以根据需要来设置。一般,可以通过定时器、文件句柄使用次数计数、信号量的释放等事件驱动机制,来实现对文件句柄关闭的管理。
当基于定时器事件驱动机制实现对文件句柄关闭的管理时,所述所述维护单元,具体用于:
定时器超时后,利用所述哈希表查找对应的有序链表;
对查找到的有序链表遍历每个节点,根据节点信息中的访问时间及当前时间,判断是否需要对节点对应的文件句柄进行资源回收。
具体地,当访问时间及当前时间的差值超过设置的标准值时,所述维护单元确定需要对节点对应的文件句柄进行资源回收。
当基于文件句柄使用次数计数事件驱动机制实现对文件句柄关闭的管理时,所述维护单元,具体用于:
查找到对应的文件句柄后,将文件句柄的使用次数进行更新;以及;
根据更新后的文件句柄的使用次数,判断是否需要对节点对应的文件句柄进行资源回收。
具体地,当使用次数达到设定次数,或者在预设时长内使用次数低于设定次数时,所述维护单元确定需要对节点对应的文件句柄进行资源回收。
当基于信号量的释放事件驱动机制实现对文件句柄关闭的管理时,所述维护单元,具体用于:
根据是否获取到所述操作命令对应进程所释放的信号量,判断是否需要对节点对应的文件句柄进行资源回收。
其中,当获取到所述操作命令对应进程所释放的信号量时,所述维护单元确定需要对节点对应的文件句柄进行资源回收。
这里,实际应用时,当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,所述查找单元102打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至所述表链中;相应地,所述操作单元103利用获取的文件句柄对所述文件进行读或写操作。
实际应用时,接收单元101、查找单元102、操作单元103、添加单元、以及维护单元可由文件处理装置中的中央处理器(CPU,Central Processing Unit)、微处理器(MCU,Micro Control Unit)、数字信号处理器(DSP,Digital Signal Processor)或可编程逻辑阵列(FPGA,Field-Programmable Gate Array)实现。
本发明实施例提供的方案,接收单元101接收对文件的操作命令;查找单元102响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;操作单元103利用查找到的文件句柄,对所述文件进行读或写操作,利用表链的方式来得到对应的文件句柄,当文件句柄已经被打开后,不需要再次打开文件去得到对应的文件句柄,如此,减少了文件代开和关闭的次数,从而有效地减少了I/O操作,提高了对文件***操作的速度。
另外,查找单元102利用所述文件的全路径名生成哈希值;利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄,利用哈希表和有序链表结合的方式,可以快速地查找到对应的文件句柄。而且,有序链表的节点之间是有序的,这样,可以快速地对链表中的节点对应的文件句柄进行关闭管理。
除此以外,维护单元基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄,自动实现对文件句柄资源的释放管理,无需用户参与,如此,降低了异步关闭文件的风险,避免了忘记关闭文件句柄或者多次关闭同一个文件句柄情况的发生。
添加单元查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息;当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,查找单元打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至所述表链中,这样,可以有效地防止文件句柄的丢失。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (14)
1.一种文件处理方法,其特征在于,所述方法包括:
接收对文件的操作命令;
响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;
利用查找到的文件句柄,对所述文件进行读或写操作。
2.根据权利要求1所述的方法,其特征在于,利用所述文件的文件名,在表链中查找对应的文件句柄,包括:
利用所述文件的全路径名生成哈希值;
利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;
利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄。
3.根据权利要求2所述的方法,其特征在于,所述有序链表的结构为双向链表结构、或为红黑树结构。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄。
6.根据权利要求5所述的方法,其特征在于,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,包括:
定时器超时后,利用所述哈希表查找对应的有序链表;
对查找到的有序链表遍历每个节点,根据节点信息中的访问时间及当前时间,判断是否需要对节点对应的文件句柄进行资源回收。
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:
查找到对应的文件句柄后,将文件句柄的使用次数进行更新;
相应地,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,包括:
根据更新后的文件句柄的使用次数,判断是否需要对节点对应的文件句柄进行资源回收。
8.根据权利要求5所述的方法,其特征在于,所述基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,包括:
根据是否获取到所述操作命令对应进程所释放的信号量,判断是否需要对节点对应的文件句柄进行资源回收。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述方法还包括:
当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至所述表链中;
相应地,利用获取的文件句柄对所述文件进行读或写操作。
10.一种文件处理装置,其特征在于,所述装置包括:
接收单元,用于接收对文件的操作命令;
查找单元,用于响应所述操作命令,利用所述文件的文件名,在表链中查找对应的文件句柄;所述表链表征处于有效状态的文件句柄资源;
操作单元,用于利用查找到的文件句柄,对所述文件进行读或写操作。
11.根据权利要求10所述的装置,其特征在于,所述查找单元,具体用于:
利用所述文件的全路径名生成哈希值;
利用所述哈希值,在哈希表中查找对应的有序链表;所述有序链表的节点之间是有序的;
利用所述文件的全路径名,在查找到的有序链表中查找对应的文件句柄。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
添加单元,用于查找到对应的文件句柄后,利用当前时间修改节点信息中的访问时间信息,并添加至所述有序链表中;所述节点信息包含文件句柄、文件的文件全路径名及访问时间信息。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
维护单元,用于基于文件句柄维护策略,对所述有序链表中的文件句柄进行资源回收判断,当确定需关闭相应的文件句柄时,删除相应的节点信息或将所述节点信息置为无效,并关闭相应的文件句柄。
14.根据权利要求10至13任一项所述的装置,其特征在于,所述查找单元,还用于当利用所述文件的文件名,未在链表中查找到对应的文件句柄时,打开对应的文件以获取所述对应的文件句柄,并将获取的文件句柄保存至表链中;
相应地,所述操作单元,用于利用获取的文件句柄对所述文件进行读或写操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610969538.2A CN107992504A (zh) | 2016-10-26 | 2016-10-26 | 一种文件处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610969538.2A CN107992504A (zh) | 2016-10-26 | 2016-10-26 | 一种文件处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107992504A true CN107992504A (zh) | 2018-05-04 |
Family
ID=62028829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610969538.2A Pending CN107992504A (zh) | 2016-10-26 | 2016-10-26 | 一种文件处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107992504A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522308A (zh) * | 2018-11-06 | 2019-03-26 | 北京太星晨信息技术有限公司 | 一种连接句柄管理方法和装置 |
CN109739468A (zh) * | 2019-01-07 | 2019-05-10 | Oppo广东移动通信有限公司 | 运行优化方法、装置、存储介质及终端设备 |
CN109947732A (zh) * | 2019-03-21 | 2019-06-28 | 昆山九华电子设备厂 | 一种集群文件***优化对文件描述符使用效率的方法 |
CN111400258A (zh) * | 2020-03-20 | 2020-07-10 | 深圳市凯沃尔电子有限公司 | 一种数据文件存储方法和装置 |
CN111488373A (zh) * | 2020-03-24 | 2020-08-04 | 支付宝(杭州)信息技术有限公司 | 用于处理请求的方法和*** |
CN112015816A (zh) * | 2020-08-27 | 2020-12-01 | 北京字节跳动网络技术有限公司 | 数据同步方法、装置、介质及电子设备 |
WO2023004991A1 (zh) * | 2021-07-28 | 2023-02-02 | 苏州浪潮智能科技有限公司 | 一种文件读写业务的处理方法、***、设备以及介质 |
-
2016
- 2016-10-26 CN CN201610969538.2A patent/CN107992504A/zh active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522308A (zh) * | 2018-11-06 | 2019-03-26 | 北京太星晨信息技术有限公司 | 一种连接句柄管理方法和装置 |
CN109522308B (zh) * | 2018-11-06 | 2023-06-20 | 北京太一星晨信息技术有限公司 | 一种连接句柄管理方法和装置 |
CN109739468A (zh) * | 2019-01-07 | 2019-05-10 | Oppo广东移动通信有限公司 | 运行优化方法、装置、存储介质及终端设备 |
CN109947732A (zh) * | 2019-03-21 | 2019-06-28 | 昆山九华电子设备厂 | 一种集群文件***优化对文件描述符使用效率的方法 |
CN109947732B (zh) * | 2019-03-21 | 2022-10-11 | 昆山九华电子设备厂 | 一种集群文件***优化对文件描述符使用效率的方法 |
CN111400258A (zh) * | 2020-03-20 | 2020-07-10 | 深圳市凯沃尔电子有限公司 | 一种数据文件存储方法和装置 |
CN111488373A (zh) * | 2020-03-24 | 2020-08-04 | 支付宝(杭州)信息技术有限公司 | 用于处理请求的方法和*** |
CN111488373B (zh) * | 2020-03-24 | 2023-09-22 | 支付宝(杭州)信息技术有限公司 | 用于处理请求的方法和*** |
CN112015816A (zh) * | 2020-08-27 | 2020-12-01 | 北京字节跳动网络技术有限公司 | 数据同步方法、装置、介质及电子设备 |
WO2023004991A1 (zh) * | 2021-07-28 | 2023-02-02 | 苏州浪潮智能科技有限公司 | 一种文件读写业务的处理方法、***、设备以及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107992504A (zh) | 一种文件处理方法及装置 | |
CN103473251B (zh) | 在使用处理器件的计算环境中提供使用选择性元组版本化的文件***快照的方法和*** | |
CN104301360B (zh) | 一种日志数据记录的方法、日志服务器及*** | |
CN105677250B (zh) | 对象存储***中的对象数据的更新方法和更新装置 | |
CN104252452B (zh) | 数据管理的方法及装置 | |
CN106021017A (zh) | 用于备份和恢复克隆文件的方法和*** | |
CN107688500A (zh) | 一种分布式任务处理方法、装置、***及设备 | |
CN106202070A (zh) | 文件存储处理方法与*** | |
CN105608162B (zh) | 文件处理方法和装置 | |
CN107111628A (zh) | 在存储器优化表上的列储存库索引的有效维持 | |
JP2007183864A (ja) | ファイル検索方法及びそのシステム | |
CN109582485A (zh) | 一种配置变更异常检测方法及装置 | |
CN109583190A (zh) | 监控进程的方法和装置 | |
JP2010182194A (ja) | 統合ログ生成装置及び統合ログ生成プログラム及び記録媒体 | |
CN106648994A (zh) | 一种备份操作日志的方法,设备和*** | |
CN110399333A (zh) | 删除快照的方法、设备和计算机程序产品 | |
CN106681863A (zh) | 保存电子病历编辑内容的方法和终端设备 | |
KR101181980B1 (ko) | 보안성을 강화한 데이터 영구 삭제 방법 | |
CN104077078B (zh) | 读存储区、更新存储区的方法及装置 | |
CN106250453A (zh) | 基于云存储的数值型数据的密文检索方法及装置 | |
Cherkasova et al. | On net modeling of industrial size concurrent systems | |
CN102982288B (zh) | 在便携式终端中执行数据的加密和解密的设备和方法 | |
CN107577802A (zh) | 一种数据库管理方法及装置 | |
US9405788B2 (en) | Mass delete restriction in a database | |
US9009731B2 (en) | Conversion of lightweight object to a heavyweight object |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180504 |