一. 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

linux导出路径path,Linux kernel 绝对路径之d_path篇【转】相关推荐

  1. Linux 执行文件 path,linux可执行文件添加到PATH环境变量的方法

    linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...

  2. linux java.library.path,linux LD_LIBRARY_PATH环境变量

    linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf 或者 使用-R选项) 今天下午尝试使用libosip2,安装比较简单,按照自带的help文档 ...

  3. Linux导出函数控制,linux 下仅导出指定函数的方法

    节整理资料时,发现了这个,是两年前在 LOVEUNIX 上的回帖.自己都忘了,贴在这里 做个备份. linux 也有导出文件.不用特定的扩展名,且不是在 gcc 中指定参数,而是在 ld 中. 写一个 ...

  4. linux导出硬件信息,Linux 上生成硬件信息与配置报告: Sysreport

    当需要 Linux 主机详细完整的描述给另一个人的时候,这个工具非常适合.用 root 用户之行,但要注意最好不要抓取 currently installed packages 信息,这一步非常慢.( ...

  5. oracle中aix至Linux导出,aix 迁移linux oracle数据库

    EBS R12的11g库从AIX迁移到Linux不能采用 Cross Platform Incremental Backup 的原因 详见红色字体部分,估计是EBS中一些特殊的object不适用这种方 ...

  6. 怎么linux中创建虚拟路径,linux服务器创建虚拟路径解决文件上传路径隔离问题...

    需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...

  7. Android 路径(Path)与剪裁(Clipping)详解

    转自:http://blog.csdn.net/bigdavidwli007/article/details/8930640 在定义各种形状的view的需求驱使下 ,在网上找到这片文章,貌似看的人很少 ...

  8. Linux之搜索路径PATH

    Linux之搜索路径PATH 外部和内部命令 shell的命令分为两种:内部命令和外部命令 内部命令:简称builtin,由shell自身解析并执行,在shell自己的进程内执行 外部命令:shell ...

  9. Linux的cuda安装找不到路径,Cuda安装详细步骤

    为了学习Caffe新买了笔记本,安装cuda时遇到了很多问题,不过好在都成功的解决了. 网上有很多cuda的安装教程,每个人的电脑配置不同遇到的问题也不一样,现在就我自己的安装配置情况总结一下具体的安 ...

最新文章

  1. python模拟高并发_Python基于gevent实现高并发代码实例
  2. 【计算理论】图灵机 ( 接受状态作用 | 格局 | 图灵机语言 | 图灵机设计复杂性 )
  3. TLS回调函数(2)
  4. ftp linux 开启验证_在linux中开启ftp服务
  5. 非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!
  6. 我年薪百万,孩子教育花掉一半
  7. C语言中的多字节字符与宽字符
  8. Mysql Sql语句令某字段值等于原值加上一个字符串
  9. 腾讯自己与自己的战争
  10. html自定义修改单选框多选框样式以及获取选中的值
  11. python常用模块之time
  12. 移动硬盘变成RAW怎么办?跟我这样恢复数据
  13. PHP服务端 苹果支付(IAP)处理
  14. 创意h5游戏案例:记忆类H5手机游戏评测
  15. 深圳超美海边烧烤场 深圳户外烧烤攻略
  16. visio的使用技巧
  17. C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式
  18. http常见状态返回码
  19. 点石成金:“硅业报国”不仅是理念
  20. LDO输出为什么并联接地电阻?

热门文章

  1. linux echo命令的-n、-e两个参数
  2. IT旅途——程序员面试经验分享
  3. GDI+ 获取本地电脑的图片编码器
  4. Android异步下载网络图片(其三:ExecutorService)
  5. HTML 5 input type 属性
  6. Sqlite数据库中索引的使用、索引的优缺点
  7. Hadoop之道--MapReduce之Hello World实例wordcount
  8. JNI开发之锅炉压力监控器
  9. 理论计算机初步:概率算法和近似算法
  10. 求字符串中最长无重复子序列