+ -
当前位置:首页 → 问答吧 → 系统调用拦截mkdir所得的目录不是全路径的问题,终于找到解决办法。

系统调用拦截mkdir所得的目录不是全路径的问题,终于找到解决办法。

时间:2010-07-19

来源:互联网

本帖最后由 zonelight 于 2010-07-19 20:43 编辑
  1. asmlinkage long new_mkdir(const char __user *pathname,int mode)
  2. {
  3.     /*创建一个nameidata结构体*/
  4.     struct nameidata nd;
  5.     /*nd这里赋值完后里面就含有全路径的信息了*/
  6.     int ret = path_lookup(pathname,LOOKUP_DIRECTORY,&nd);     
  7.     /*打印出的是所创建的文件夹的名称,比如mydir*/
  8.     printk("%s \n",nd.path.dentry->d_name.name);
  9.     /*关键步骤,d_parent同样是一个dentry结构,指向父目录,如果全路径是/home/my/mydir/,那么这时候输出的就是my*/
  10.     printk("%s \n",nd.path.dentry->d_parent->d_name.name);
  11.     /*以此类推,一直往上推到根目录"/"  */
  12.     printk("%s \n",nd.path.dentry->d_parent->d_parent->d_name.name);
  13.     return old_mkdir(pathname,mode);
  14. }
复制代码

作者: zonelight   发布时间: 2010-07-19

LZ的实现方式就是通过多次打印目录的父目录,父目录的父目录来实现全路径,对吗

作者: accessory:   发布时间: 2010-07-20

是,要是有一部到位的方法就好了,这么一个个父目录弄出来以后还要再做字符窜的连接。

作者: Godbach   发布时间: 2010-07-20

是的。如果一个目录比较深的话,需要调用好多次

作者: zonelight   发布时间: 2010-07-20

热门下载

更多