zoukankan      html  css  js  c++  java
  • Linux kernel 绝对路径之d_path篇【转】

    转自:https://blog.csdn.net/cenziboy/article/details/8761621

    一. d_path函数说明


    d_path 是内核提供的根据dentry和vfsmount获取绝对路径函数

    此函数有2个版本,以内核版本2.6.25为分界

    extern char *d_path(const struct path *, char *, int); 

    extern char * d_path(struct dentry *, struct vfsmount *, char *, int);

    结构体path原型如下

    struct path {
    struct vfsmount *mnt;
    struct dentry *dentry;
    };
    仅仅是对 vfsmount 和 dentry进行了简单封装而已

    二.获取进程路径
    char* get_absolute_path(struct task_struct * task)
    {
    char * ret_ptr = NULL;
    char * tpath = NULL ;
    struct vm_area_struct * vma = NULL;
    struct path base_path;

    tpath = (char*)kmalloc(512, 0);
    if(NULL == tpath || NULL == task)
    {
    return NULL;
    }
    memset(tpath,'',512);

    task_lock(task);
    if(task->mm && task->mm->mmap)
    {
    vma = task->mm->mmap;
    }
    else
    {
    task_unlock(task);
    kfree(tpath);
    return NULL;
    }

    /*
    * 取得 path(a struct含dentry和vfsmount),参考自 fs/proc/base.c中proc_exe_link
    */
    while(vma)
    {
    if ((vma->vm_flags & VM_EXECUTABLE) && vma->vm_file)
    {
    base_path = vma->vm_file->f_path;
    break;
    }
    vma = vma->vm_next;
    }
    task_unlock(task);

    /*
    * 调用 d_path, 得到绝对路径
    */
    ret_ptr = d_path(&base_path, tpath, 512);

    return ret_ptr;
    }

    三. 获取文件路径
    根据文件描述符获取文件路径主要是从task_struct中取得文件的dentry和文件所在文件系统vfsmount

    #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
    base_path = current->files->fdt->fd[fd]->f_path;
    #else
    base_dp = current->files->fdt->fd[fd]->f_path.dentry;
    vfsmnt_ptr = current->files->fdt->fd[fd]->f_path.mnt;
    然后就可以使用d_path,得到绝对路径了

    ————————————————
    版权声明:本文为CSDN博主「nehc」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/cenziboy/article/details/8761621

  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/12103109.html
Copyright © 2011-2022 走看看