- 论坛徽章:
- 0
|
现在在做一个虚拟文件系统下的一个试验,通过hook file->f_op->open对文件的读取操作进行拦截,但是发现当对以O_TRUNC方式open文件时,执行到file->f_op->open的时候,文件中数据已经被清空了。请问各位怎么回事?
读取文件实际上是通过filp_open来完成的,最后调用 file->f_op->open是在dentry_open中;分析发现对文件的截断操作应该是在open_namei中完成(最后调用do_truncate),但是不知道如何才能有效的对文件的O_TRUNC方式open进行有效拦截处理,大家帮忙!!
753struct file *filp_open(const char * filename, int flags, int mode)
754{
755 int namei_flags, error;
756 struct nameidata nd;
757
758 namei_flags = flags;
759 if ((namei_flags+1) & O_ACCMODE)
760 namei_flags++;
761 if (namei_flags & O_TRUNC)
762 namei_flags |= 2;
763
764 error = open_namei(filename, namei_flags, mode, &nd);
765 if (!error)
766 return dentry_open(nd.dentry, nd.mnt, flags);
767
768 return ERR_PTR(error);
769}
[ 本帖最后由 canjian 于 2009-4-7 10:13 编辑 ] |
|