在系统很大的时候,可能会有很多个模块操作某个文件,有时候文件突然被删掉了或者被创建了,大家也不知道是哪个模块做的,因为整个操作过程很快,等我们看到文件被删掉了,对应的模块已经close掉了这个文件句柄。这个时候就希望在内核里面做一个监控,看看是个模块操作了文件。
这里提供一个方法,就是在VFS层对某个文件或者目录做监控,把操作的进程打印出来。
比如像查看哪些进程操作了文件miguaddata.txt,可以根据文件名先定义一个宏定义
#define FILE_MONITOR "miguaddata.txt"
然后到相应的open函数的对应地方找到vfs接口传递下来的文件名,用strnsr的函数来做过滤,如下
函数一:struct file *do_filp_open(int dfd, struct filename *pathname,const struct open_flags *op):
if( pathname->name&& strnstr(pathname->name,FILE_MONITOR,strlen(pathname->name))){
printk(KERN_ALERT "___%d > %s %s process[%s %d] parent<%s:%d>\n",__LINE__,__FUNCTION__,pathname->name,current->comm,current->pid,current->parent->comm,current->parent->pid);
}
函数二:static long do_rmdir(int dfd, const c