一种文件监控方法、装置、电子设备和存储介质与流程

文档序号:29630482发布日期:2022-04-13 15:47阅读:161来源:国知局
一种文件监控方法、装置、电子设备和存储介质与流程

1.本公开涉及信息技术领域,尤其涉及一种文件监控方法、装置、电子设备和存储介质。


背景技术:

2.日常工作中,经常需要了解某些文件所发生的变化,例如在android手机的实际开发过程中经常会遇到如下问题:有时候一些文件会突然丢失。如果丢失的文件是用户可以感知到的文件(如拍摄的照片等)则会给用户带来较差的体验,如果丢失的文件是影响系统启动的关键文件,则会造成手机无法启动等故障。无论是哪种情况都是较严重的问题。因此,需要对手机中的文件进行监控,以及时发现文件所发生的变化,并采取适当的措施进行处理,保证用户体验和手机的正常运行。
3.inotify是一种细粒度的、功能强大的、异步的文件变化通知机制,通过inotify可以监控文件系统中的添加、删除,修改、移动等各种文件操作事件。
4.但是,通过inotify无法知道是哪个应用程序触发的上述文件操作事件,无法提供有效信息。


技术实现要素:

5.为了解决上述技术问题或者至少部分地解决上述技术问题,本公开实施例提供了一种文件监控方法、装置、电子设备和存储介质,实现了确定与监控事件的发生相关联的目标应用程序的标识的目的,以为解决问题提供线索。
6.第一方面,本公开实施例提供了一种文件监控方法,该方法包括:
7.确定被监控文件和/或文件夹以及监控事件;
8.启动预设监控程序;
9.在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
10.第二方面,本公开实施例还提供了一种文件监控装置,该装置包括:
11.确定模块,用于确定被监控文件和/或文件夹以及监控事件;
12.启动模块,用于启动预设监控程序;
13.监控模块,用于在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
14.第三方面,本公开实施例还提供了一种电子设备,所述电子设备包括:
15.一个或多个处理器;
16.存储装置,用于存储一个或多个程序;
17.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理
器实现如上所述的文件监控方法。
18.第四方面,本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的文件监控方法。
19.本公开实施例提供的技术方案与现有技术相比至少具有如下优点:
20.本公开实施例提供的文件监控方法,通过确定被监控文件和/或文件夹以及监控事件;启动预设监控程序;在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联的技术手段,实现了确定与监控事件的发生相关联的目标应用程序的标识的目的,以为解决问题提供线索。
附图说明
21.结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。
22.图1为本公开实施例中的一种文件监控方法的流程图;
23.图2为本公开实施例中的一种文件监控方案的整体架构图;
24.图3为本公开实施例中的一种文件事件监控服务的工作流程示意图;
25.图4为本公开实施例中的一种文件监控方法的流程示意图;
26.图5为本公开实施例中的一种文件监控方案的架构示意图;
27.图6为本公开实施例中的一种文件监控装置的结构示意图;
28.图7为本公开实施例中的一种电子设备的结构示意图。
具体实施方式
29.下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
30.应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行以及并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
31.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
32.需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
33.需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
34.本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性
的目的,而并不是用于对这些消息或信息的范围进行限制。
35.日常工作中,经常会需要知道某些文件的变化,一般是通过轮询机制检查文件的变化,不过该种方式较低效。inotify是一种细粒度的、功能强大的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持。inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是比较自然的事件通知接口,也与自然世界事件机制相符合。通过inotify可以监控文件系统中添加、删除,修改、移动等各种文件操作事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况。
36.在android系统中,出现文件丢失这种故障的原因一般是应用程序的某些异常删除行为导致,出现的概率较低,而且很难确定是哪个软件的异常行为导致的,进一步查找原因较困难。因为文件一旦被异常地删除,在系统中留下的信息较少,例如无法确定是什么时间被删除的,更无法确定是被哪个应用程序删除的。因此针对文件被异常删除的情况,现在的做法是使用linux的inotify机制,监控一些关键的文件和/或文件夹的文件删除事件,如果一旦监控到文件删除事件发生,则可以获取到发生删除事件的时间和文件名。但是仍然无法确定是被哪个应用程序删除的,因此还是无法获得关键的线索。
37.针对上述问题,本公开在linux inotify机制的基础上,提出一种方法,来获取触发文件操作事件的应用程序的包名,这样则可以确定文件操作事件是被哪个应用程序触发的,从而获得进一步分析的关键线索。以文件操作事件是删除文件为例,通过本公开的方法则可以确定文件是被哪个应用程序删除的。
38.具体的设计思想是对linux inotify机制的实现进行一些修改,在linux内核里面,标准的inotify实现是在文件操作事件发生时,会把发生的事件名和文件名,传递到用户空间。本公开则在原有的文件名信息上附加产生此事件的应用程序的标识(导致文件操作事件发生的应用程序在本公开中被称为目标应用程序)。基于改进的inotify机制,本公开还会在用户空间启动一个服务程序来设置要监控的文件和/或文件夹,设置要监控的文件操作事件(要监控的文件操作事件被称为监控事件),然后启动inotify机制,如此,在发生监控事件时,则可以获取到导致该监控事件的目标应用程序。
39.图1为本公开实施例中的一种文件监控方法的流程图。该方法适用于对目标文件系统进行文件监控,以及时发现发生在目标文件系统中的监控事件。该文件监控方法可以由文件监控装置执行,该装置可以采用软件和/或硬件的方式实现,该装置可配置于电子设备中,例如终端。其中,终端具体包括但不限于智能手机、掌上电脑、平板电脑、便携式可穿戴设备、智能家居设备(例如台灯)等。
40.如图1所示,该方法具体可以包括如下步骤:
41.步骤110、确定被监控文件和/或文件夹以及监控事件。
42.其中,被监控文件和/或文件夹可以根据实际需求进行设定。被监控文件和/或文件夹通常是在文件和/或文件夹发生变化时会影响电子设备正常启动、运行的关键文件和/或文件夹;或者会直接被用户感知到的文件和/或文件夹,例如存储用户照片的文件可被确定为被监控文件。
43.监控事件可以是删除文件、添加文件、修改文件和/或移动文件等文件操作事件。
44.步骤120、启动预设监控程序。
45.在一些实施方式中,所述目标文件系统为sdcardfs文件系统。sdcardfs文件系统是一个栈式文件系统,也可以称为包装文件系统,它可以把系统调用发送的各种命令参数传递到底层文件系统中。sdcardfs文件系统的主要功能是管理android提供的“/sdcard”目录,“/sdcard”目录被android作为“外部”存储,相对于“/data”分区的内部存储,“/sdcard”是软件层次上的隔离,内部存储和外部存储可能实际都是保存在同一个userdata分区下。外部存储是平时被操作最多的,外部存储一般是storage文件夹,也有可能是mnt文件夹,不同厂家有可能不一样,通常称为“/sdcard”。
46.sdcardfs文件系统是android中外部存储采用的一种overlay文件系统,在android 8.0以前采用fuse文件系统,从android 8.0到android 10.0采用sdcardfs文件系统,从android 11又再次引入fuse文件系统。
47.在sdcardfs文件系统中,所述启动预设监控程序,包括:
48.初始化改进的文件监控句柄;向所述文件监控句柄发送使能指令,以使所述改进的文件监控句柄生效;将所述被监控文件和/或文件夹的标识以及监控事件添加至所述改进的文件监控句柄。
49.所述向所述文件监控句柄发送使能指令,以使所述改进的文件监控句柄生效,包括:根据所述使能指令,将所述文件监控句柄对应的结构体实例中的预设标志变量设置为1;所述预设标志变量的缺省值为0。
50.具体的,inotify机制在内核里对于用户空间初始化的每一个文件监控句柄都有一个对应的fsnotify_group结构体实例。为了兼容标准的inotify机制,在该结构体实例里面增加一个预设标志变量user_flag,预设标志变量user_flag的缺省值设置为0。然后定义一个ioctl,inotify_ioc_set_userflag,当用户空间给文件监控句柄发送此ioctl后,预设标志变量user_flag将被设置为1。即通过ioctl向所述文件监控句柄发送使能指令。
51.步骤130、在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
52.在一些实施例中,在sdcardfs文件系统中,所述在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,包括:在所述被监控文件和/或文件夹发生所述监控事件时,若所述预设标志变量的数值为1,通过当前用户函数获取当前上下文的目标用户标识,通过当前进程函数获取当前上下文的目标进程标识;将所述目标用户标识、所述目标进程标识和所述被监控文件和/或文件夹的标识赋值给事件处理函数的事件变量;基于所述事件处理函数的所述事件变量确定所述被监控文件和/或文件夹的标识、所述目标用户标识和所述目标进程标识,其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
53.具体的,在inotify的事件处理函数inotify_handle_event中,给事件变量event-》name赋值时,判断user_flag的值,如果user_flag的值为0,则给事件变量event-》name赋值被监控文件和/或文件夹的标识filename;如果user_flag的值为1,则通过调用当前用户
函数current_user()和当前进程函数current-》pid获取当前上下文的目标用户标识uid和目标进程标识pid,然后将目标用户标识uid和目标进程标识pid附着在被监控文件和/或文件夹的标识filename后面,然后将被监控文件和/或文件夹的标识filename-目标用户标识uid-目标进程标识pid赋值给事件变量event-》name,事件变量event-》name将会在用户空间被读取到,从而实现获取被监控文件和/或文件夹的标识、监控事件以及目标应用程序的标识的目的。其中,目标应用程序的标识基于目标用户标识uid或者基于目标用户标识uid和目标进程标识pid确定。
54.在一种可选实施方式中,目标应用程序的标识可以是目标应用程序的包名。示例性的,在获取到所述被监控文件和/或文件夹的标识、所述监控事件、所述目标用户标识以及所述目标进程标识之后,所述方法还包括:基于所述目标用户标识确定所述目标应用程序的包名;或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名。
55.其中,包名指是应用程序的软件包名称(代码命名空间),是在开发应用程序时指定的。例如平常写代码import的package则指包名,具体的,package=“com.example.myapp”。
56.android中的用户标识uid用于标识一个应用程序,用户标识uid在安装应用程序时被分配,并且在应用程序存在于电子设备(例如手机)期间不会改变。一个应用程序只能有一个用户标识uid,多个应用程序可以使用shareduserid方式共享同一个用户标识uid,前提是这些应用程序的签名要相同。针对一个应用程序只能有一个用户标识uid的情况,基于用户标识uid可以确定唯一的应用程序。针对多个应用程序共享同一个用户标识uid的情况,则需要进一步借助进程标识pid确定唯一的应用程序。
57.在一些实施例方式中,所述基于所述目标用户标识确定所述目标应用程序的包名,或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名,包括:根据预设用户标识与预设应用程序的包名之间的映射关系,确定与所述目标用户标识对应的候选应用程序的包名;若所述候选应用程序的包名为多个,根据预设进程标识与所述候选应用程序的包名之间的映射关系确定与所述目标进程标识对应的所述目标应用程序的包名;若所述候选应用程序的包名为一个,将所述候选应用程序的包名确定为所述目标应用程序的包名。
58.进一步的,如果监测到应用程序安装事件或应用程序被卸载事件,对所述映射关系进行更新。
59.在确定所述目标应用程序的包名之后,所述方法还包括:获取当前的系统时间作为所述监控事件的时间戳;将所述时间戳、所述被监控文件和/或文件夹的标识、所述监控事件以及所述目标应用程序的包名写入日志文件。如此,工程人员便可通过日志文件确定是哪个应用程序在什么时间对哪个文件进行了什么样的文件操作事件,有助于解决相关文件问题。
60.本公开实施例提供的文件监控方法,通过确定被监控文件和/或文件夹以及监控事件;启动预设监控程序;在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联的技术手段,实现了对导致
监控事件发生的目标应用程序进行定位的目的,可为解决该监控事件提供进一步的信息线索。
61.概括性的,参考如图2所示的一种文件监控方案的整体架构图,文件监控方案包括改进的inotify机制210、文件事件监控服务220、应用程序包名映射管理模块230。
62.其中,改进的inotify机制210是在linux原有的inotify机制的基础上,增加向用户空间传递用户标识uid和进程标识pid的信息,为了保持对原有linux机制的支持,改进的inotify机制默认不使能,新引入一个ioctl用来使能改进的inotify机制,使能改进的inotify机制后,在文件名后面会附着用户标识uid和进程标识pid的信息。改进的inotify机制的使用方式和原有方式兼容,只是在初始化inotify时,发送ioctl,以使改进的inotify机制使能。
63.文件事件监控服务220用于配置要监控的文件和/或文件夹,然后初始化改进的inotify,发送ioctl,循环接接收内核传来的文件事件信息,把附着用户标识uid和进程标识pid的文件名信息,还原处理,把用户标识uid和进程标识pid信息发送给应用程序包名映射管理模块230获取目标应用程序的包名,然后把文件事件对应的时间,事件名,文件名,包名等信息保存到日志文件中。
64.应用程序包名映射管理模块230用于维护当前系统(例如手机)里面安装的所有应用程序的用户名uid和包名的映射关系,在有应用程序被安装和卸载时,会重新刷新上述映射关系。
65.具体的,应用程序包名映射管理模块230的功能是向其它模块或者服务提供接口,根据输入的用户标识uid和进程标识pid返回目标应用程序的包名。在android系统中/data/system/packages.list文件里面保存有全部应用程序的包名及对应的用户标识uid,当有应用程序被安装和卸载的时系统会更新文件/data/system/packages.list。因此,在公开的实施方式中采用的方法是启动一个线程监控/data/system/packages.list的变化,如果有变化就读取这个文件的内容刷新用户标识uid和包名的映射关系,并向其它模块或服务提供接口,通过用户标识uid获取目标应用程序的包名。
66.需要说明的是,在android系统中,存在多个应用程序共享同一个用户标识uid的情况,这种情况下只根据用户标识uid则无法确定具体是哪个应用程序,此时需要再结合进程标识pid的信息,通过读取系统的实时状态节点/proc/xxxx/cmdline的值就获得具体的应用程序的包名。例如:读取实时状态节点/proc/10008/cmdline可以获得进程标识pid为10008,对应的包名是com.android.gallery3d。
67.应用程序包名映射管理模块230的工作流程为:
68.解析应用程序包列表packages.list,建立用户标识uid和包名的映射关系,标记多应用程序共享的用户标识uid列表,如有应用程序被安装或者被卸载则重新执行上述解析过程。其它模块或者服务发送获取应用程序包名的请求时,如果当前用户标识uid对应唯一包名则直接返回,如果是多应用程序共享当前用户标识uid,则再根据当前进程标识pid读取对应的/proc/xxx/cmdline节点获取应用程序的包名,然后将该包名返回。
69.以某个应用程序删除一个文件为例说明上述文件监控流程:
70.文件事件监控服务正常启动,监控目录为testdir下的所有文件,监控事件是“删除事件”,应用程序包名映射管理模块正常工作。假设一个应用程序的包名是“com.example.myapp”,对应的用户标识uid是10228,该应用程序删除了一个文件“/data/testdir/testfile.txt”。通过改进的inotify机制用户标识uid和进程标识pid附着在文件名“testfile.txt”后传给用户空间,假设进程标识pid是1089,则附着用户标识uid和进程标识pid的文件名为,testfile.txt_pid:1089_uid:10228。文件事件监控服务把pid:1089和uid:10228传给应用程序包名映射管理模块,应用程序包名映射管理模块确定出与pid:1089和uid:10228对应的目标应用程序的包名为“com.example.myapp”,并将“com.example.myapp”发送给文件事件监控服务。文件事件监控服务收到包名com.example.myapp后,把时间、事件名、文件名、包名等信息写入日志文件,例如写入日志文件的信息是:
71.20211008_19:19:07_delete_/data/testdir/testfile.txt_pid:1089_com.example.myapp。
72.进一步的,参考如图3所示的一种文件事件监控服务的工作流程示意图,具体包括如下步骤:
73.步骤310、开机自动启动服务,获取配置的被监控文件和/或文件夹列表以及监控事件列表等配置信息。
74.步骤320、初始化一个inotify的文件监控句柄,并创建日志文件。
75.步骤330、发送ioctl,通过inotify_ioc_set_userflag设置使能改进的inofity机制。
76.步骤340、把被监控文件和/或文件夹以及监控事件,加入inotify的文件监控句柄,启动监控。
77.步骤350、循环等待监控事件发生,如果有监控事件发生,则执行步骤360。
78.步骤360、读取内核传来的文件名、当前用户标识uid、当前进程标识pid以及监控事件信息。
79.步骤370、将当前用户标识uid和当前进程标识pid发送至应用程序包名映射管理模块,以使应用程序包名映射管理模块根据当前用户标识uid和当前进程标识pid确定目标应用程序的包名。
80.步骤380、接收应用程序包名映射管理模块返回的目标应用程序的包名。
81.步骤390、把文件名、时间戳、目标应用程序的包名以及监控事件等信息写入日志文件中。
82.在上述各实施例的基础上,对于android系统中的内部存储区域的文件监控,上述的文件监控方法可以较好地记录到产生监控事件应用的目标应用程序的包名。
83.但是,android系统中外部存储区域有两种文件系统,一种是sdcardfs,另一种是fuse。如果外部存储区域是sdcardfs文件系统,上述的文件监控方法也可以较好地确定产生监控事件的目标应用程序的包名。但如果是fuse文件系统,则因为fuse文件系统是在用户空间有一个进程来代理所有的文件操作,这样从内核的角度看,所有的文件操作都是这个代理进程发起的,这样就不能获得真正产生文件操作的应用程序了。
84.针对fuse文件系统的上述情况,因为在fuse文件系统的用户空间的文件代理进程里面,可以通过产生的文件操作请求获取到真正发起文件操作的应用程序的用户标识uid和进程标识pid,并且在fuse文件系统中每一个文件操作都有一个对应的回调函数。本公开
实施例的处理方法是,可以在对应操作的文件操作函数里面增加一个函数调用,把用户标识uid和进程标识pid以及文件操作事件发送到文件事件监控服务,例如在文件删除的回调函数里面,发送文件删除事件、用户标识uid和进程标识pid。在文件创建的回调函数里面发送文件创建事件、用户标识uid和进程标识pid。如此等价于前面所述改进的inotify机制传来的信息。因此,结合前面的方法,便可以涵盖内部存储和外部存储的全部情况。
85.具体的,参考如图4所示的一种文件监控方法的流程示意图,该文件监控方式适用于对fuse文件系统中的文件进行监控。
86.如图4所示,所述文件监控方法包括如下步骤:
87.步骤410、确定被监控文件和/或文件夹以及监控事件。
88.步骤420、启动预设回调函数,所述预设回调函数设置在与所述监控事件匹配的文件操作函数中,用于在所述文件操作函数执行所述监控事件时返回所述被监控文件和/或文件夹的标识、所述监控事件、目标用户标识和目标进程标识。
89.其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。例如在文件删除函数中设置预设回调函数,该预设回调函数用于在文件删除函数执行文件删除操作时,返回被删除的文件和/或文件夹的标识、删除事件、触发文件删除操作的应用程序的目标用户标识和目标进程标识。在文件创建函数中设置预设回调函数,该预设回调函数用于在文件创建函数执行文件创建操作时,返回被创建的文件和/或文件夹的标识、创建事件、触发文件创建操作的应用程序的目标用户标识和目标进程标识。
90.步骤430、在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
91.步骤440、基于所述目标用户标识确定所述目标应用程序的包名;或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名。
92.步骤450、获取当前的系统时间作为所述监控事件的时间戳;将所述时间戳、所述被监控文件和/或文件夹的标识、所述监控事件以及所述目标应用程序的包名写入日志文件。
93.示例性的,参考如图5所示的一种文件监控方案的架构示意图,其中,应用程序510通过fuse文件系统中守护进程520执行文件操作,在守护进程中的各文件操作函数中设置回调函数,在执行具体的文件操作事件时,将文件名、事件名、用户标识uid和进程标识pid发送给文件事件监控服务530,文件事件监控服务530将用户标识uid和进程标识pid发送给应用程序的包名映射管理模块540,获得应用程序的包名映射管理模块540反馈的包名,进一步将当前时间、文件名、事件名和包名写入日志文件550。
94.本实施例的文件监控方法,适用于对fuse文件系统中的文件进行监控。
95.概括性的,本公开实施例提供了适用于多种文件系统的文件监控方法,可以有效记录文件的创建、删除、移动以及导致文件操作事件的目标应用程序的包名等信息,为确定文件异常的原因提供有效信息。该文件监控方法开销较小,可以在用户正常使用电子设备时开启,当发生文件操作事件时,可以根据日志文件准确确定触发文件操作事件的目标应用程序,以快速解决文件异常的问题。
96.图6为本公开实施例中的一种文件监控装置的结构示意图。如图6所示,该文件监
控装置具体包括:确定模块610、启动模块620和监控模块630。
97.其中,确定模块610,用于确定被监控文件和/或文件夹以及监控事件;启动模块620,用于启动预设监控程序;监控模块630,用于在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
98.可选的,所述目标文件系统包括sdcardfs文件系统;启动模块620包括:初始化单元,用于初始化改进的文件监控句柄;发送单元,用于向所述文件监控句柄发送使能指令,以使所述改进的文件监控句柄生效;添加单元,用于将所述被监控文件和/或文件夹的标识以及监控事件添加至所述改进的文件监控句柄。
99.可选的,所述发送单元包括:设置子单元,用于根据所述使能指令,将所述文件监控句柄对应的结构体实例中的预设标志变量设置为1;所述预设标志变量的缺省值为0。
100.可选的,监控模块630包括:获取单元,用于在所述被监控文件和/或文件夹发生所述监控事件时,若所述预设标志变量的数值为1,通过当前用户函数获取当前上下文的目标用户标识,通过当前进程函数获取当前上下文的目标进程标识;赋值单元,用于将所述目标用户标识、所述目标进程标识和所述被监控文件和/或文件夹的标识赋值给事件处理函数的事件变量;确定单元,用于基于所述事件处理函数的所述事件变量确定所述被监控文件和/或文件夹的标识、所述目标用户标识和所述目标进程标识,其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
101.可选的,所述目标文件系统包括fuse文件系统;启动模块620具体用于:启动预设回调函数,所述预设回调函数设置在与所述监控事件匹配的文件操作函数中,用于在所述文件操作函数执行所述监控事件时返回所述被监控文件和/或文件夹的标识、所述监控事件、目标用户标识和目标进程标识;其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
102.可选的,所述装置还包括:确定模块,用于在获取到所述被监控文件和/或文件夹的标识、所述监控事件、所述目标用户标识以及所述目标进程标识之后,基于所述目标用户标识确定所述目标应用程序的包名;或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名。
103.可选的,所述确定模块包括:第一确定单元,用于根据预设用户标识与预设应用程序的包名之间的映射关系,确定与所述目标用户标识对应的候选应用程序的包名;第二确定单元,用于若所述候选应用程序的包名为多个,根据预设进程标识与所述候选应用程序的包名之间的映射关系确定与所述目标进程标识对应的所述目标应用程序的包名;若所述候选应用程序的包名为一个,将所述候选应用程序的包名确定为所述目标应用程序的包名。
104.可选的,所述装置还包括:更新模块,用于如果监测到应用程序安装事件或应用程序被卸载事件,对所述映射关系进行更新。
105.可选的,所述装置还包括:获取模块,用于在确定所述目标应用程序的包名之后,获取当前的系统时间作为所述监控事件的时间戳;写入模块,用于将所述时间戳、所述被监控文件和/或文件夹的标识、所述监控事件以及所述目标应用程序的包名写入日志文件。
106.本公开实施例提供的文件监控装置,可以有效记录文件的创建、删除、移动以及导
致文件操作事件的目标应用程序的包名等信息,为确定文件异常的原因提供有效信息。
107.本公开实施例提供的文件监控装置,可执行本公开方法实施例所提供的文件监控方法中的步骤,具备执行步骤和有益效果此处不再赘述。
108.图7为本公开实施例中的一种电子设备的结构示意图。下面具体参考图7,其示出了适于用来实现本公开实施例中的电子设备700的结构示意图。本公开实施例中的电子设备700可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)、可穿戴电子设备等等的移动终端以及诸如数字tv、台式计算机、智能家居设备等等的固定终端。图7示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
109.如图7所示,电子设备700可以包括处理装置(例如中央处理器、图形处理器等)701,其可以根据存储在只读存储器(rom)702中的程序或者从存储装置708加载到随机访问存储器(ram)703中的程序而执行各种适当的动作和处理以实现如本公开所述的实施例的方法。在ram 703中,还存储有电子设备700操作所需的各种程序和数据。处理装置701、rom 702以及ram 703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。
110.通常,以下装置可以连接至i/o接口705:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置706;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置707;包括例如磁带、硬盘等的存储装置708;以及通信装置709。通信装置709可以允许电子设备700与其他设备进行无线或有线通信以交换数据。虽然图7示出了具有各种装置的电子设备700,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
111.特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码,从而实现如上所述的方法。在这样的实施例中,该计算机程序可以通过通信装置709从网络上被下载和安装,或者从存储装置708被安装,或者从rom 702被安装。在该计算机程序被处理装置701执行时,执行本公开实施例的方法中限定的上述功能。
112.需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的
程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
113.在一些实施方式中,客户端、服务器可以利用诸如http(hypertext transfer protocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“lan”),广域网(“wan”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
114.上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
115.上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:
116.确定被监控文件和/或文件夹以及监控事件;启动预设监控程序;在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
117.可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
118.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
119.描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
120.本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。
121.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供
指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
122.根据本公开的一个或多个实施例,本公开提供了一种文件监控方法,该方法包括:确定被监控文件和/或文件夹以及监控事件;启动预设监控程序;在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
123.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,所述目标文件系统包括sdcardfs文件系统;所述启动预设监控程序,包括:初始化改进的文件监控句柄;向所述文件监控句柄发送使能指令,以使所述改进的文件监控句柄生效;将所述被监控文件和/或文件夹的标识以及监控事件添加至所述改进的文件监控句柄。
124.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,所述向所述文件监控句柄发送使能指令,以使所述改进的文件监控句柄生效,包括:根据所述使能指令,将所述文件监控句柄对应的结构体实例中的预设标志变量设置为1;所述预设标志变量的缺省值为0。
125.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,所述在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,包括:在所述被监控文件和/或文件夹发生所述监控事件时,若所述预设标志变量的数值为1,通过当前用户函数获取当前上下文的目标用户标识,通过当前进程函数获取当前上下文的目标进程标识;将所述目标用户标识、所述目标进程标识和所述被监控文件和/或文件夹的标识赋值给事件处理函数的事件变量;基于所述事件处理函数的所述事件变量确定所述被监控文件和/或文件夹的标识、所述目标用户标识和所述目标进程标识,其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
126.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,所述目标文件系统包括fuse文件系统;所述启动预设监控程序,包括:启动预设回调函数,所述预设回调函数设置在与所述监控事件匹配的文件操作函数中,用于在所述文件操作函数执行所述监控事件时返回所述被监控文件和/或文件夹的标识、所述监控事件、目标用户标识和目标进程标识;其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
127.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,在获取到所述被监控文件和/或文件夹的标识、所述监控事件、所述目标用户标识以及所述目标进程标识之后,所述方法还包括:基于所述目标用户标识确定所述目标应用程序的包名;或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名。
128.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,所述基于所述目标用户标识确定所述目标应用程序的包名,或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名,包括:根据预设用户标识与预设应用程序的包名之间的映射关系,确定与所述目标用户标识对应的候选应用程序的包名;若所述候选应用程序的包名为多个,根据预设进程标识与所述候选应用程序的包名之间的映射关系确定与所述目标进程标识对应的所述目标应用程序的包名;若所述候选应用程序的包名为一个,将所述候选应用程序的包名确定为所述目标应用程序的包名。
129.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,还包括:如果监测到应用程序安装事件或应用程序被卸载事件,对所述映射关系进行更新。
130.根据本公开的一个或多个实施例,在本公开提供的文件监控方法中,可选的,在确定所述目标应用程序的包名之后,所述方法还包括:获取当前的系统时间作为所述监控事件的时间戳;将所述时间戳、所述被监控文件和/或文件夹的标识、所述监控事件以及所述目标应用程序的包名写入日志文件。
131.根据本公开的一个或多个实施例,本公开提供了一种文件监控装置,该装置包括:确定模块,用于确定被监控文件和/或文件夹以及监控事件;启动模块,用于启动预设监控程序;监控模块,用于在所述被监控文件和/或文件夹发生所述监控事件时,通过所述预设监控程序获取所述被监控文件和/或文件夹的标识、所述监控事件以及目标应用程序的标识,其中,所述监控事件的发生与所述目标应用程序相关联。
132.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述目标文件系统包括sdcardfs文件系统;启动模块包括:初始化单元,用于初始化改进的文件监控句柄;发送单元,用于向所述文件监控句柄发送使能指令,以使所述改进的文件监控句柄生效;添加单元,用于将所述被监控文件和/或文件夹的标识以及监控事件添加至所述改进的文件监控句柄。
133.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述发送单元包括:设置子单元,用于根据所述使能指令,将所述文件监控句柄对应的结构体实例中的预设标志变量设置为1;所述预设标志变量的缺省值为0。
134.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,监控模块包括:获取单元,用于在所述被监控文件和/或文件夹发生所述监控事件时,若所述预设标志变量的数值为1,通过当前用户函数获取当前上下文的目标用户标识,通过当前进程函数获取当前上下文的目标进程标识;赋值单元,用于将所述目标用户标识、所述目标进程标识和所述被监控文件和/或文件夹的标识赋值给事件处理函数的事件变量;确定单元,用于基于所述事件处理函数的所述事件变量确定所述被监控文件和/或文件夹的标识、所述目标用户标识和所述目标进程标识,其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
135.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述目标文件系统包括fuse文件系统;启动模块具体用于:启动预设回调函数,所述预设回调函数设置在与所述监控事件匹配的文件操作函数中,用于在所述文件操作函数执行所述监控事件时返回所述被监控文件和/或文件夹的标识、所述监控事件、目标用户标识和目标进程标识;其中,所述目标应用程序的标识包括所述目标用户标识和所述目标进程标识。
136.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述装置还包括:确定模块,用于在获取到所述被监控文件和/或文件夹的标识、所述监控事件、所述目标用户标识以及所述目标进程标识之后,基于所述目标用户标识确定所述目标应用程序的包名;或者,基于所述目标用户标识以及所述目标进程标识确定所述目标应用程序的包名。
137.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述确定模块包括:第一确定单元,用于根据预设用户标识与预设应用程序的包名之间的映射关系,确定与所述目标用户标识对应的候选应用程序的包名;第二确定单元,用于若所述候选应用程序的包名为多个,根据预设进程标识与所述候选应用程序的包名之间的映射关系确定与所述目标进程标识对应的所述目标应用程序的包名;若所述候选应用程序的包名为一个,将所述候选应用程序的包名确定为所述目标应用程序的包名。
138.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述装置还包括:更新模块,用于如果监测到应用程序安装事件或应用程序被卸载事件,对所述映射关系进行更新。。
139.根据本公开的一个或多个实施例,在本公开提供的文件监控装置中,可选的,所述装置还包括:获取模块,用于在确定所述目标应用程序的包名之后,获取当前的系统时间作为所述监控事件的时间戳;写入模块,用于将所述时间戳、所述被监控文件和/或文件夹的标识、所述监控事件以及所述目标应用程序的包名写入日志文件。
140.根据本公开的一个或多个实施例,本公开提供了一种电子设备,包括:
141.一个或多个处理器;
142.存储器,用于存储一个或多个程序;
143.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本公开提供的任一所述的文件监控方法。
144.根据本公开的一个或多个实施例,本公开提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本公开提供的任一所述的文件监控方法。
145.本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如上所述的文件监控方法。
146.以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
147.此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
148.尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1