linux导出路径path,Linux kernel 绝对路径之d_path篇【转】
一. 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篇【转】相关推荐
- Linux 执行文件 path,linux可执行文件添加到PATH环境变量的方法
linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...
- linux java.library.path,linux LD_LIBRARY_PATH环境变量
linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf 或者 使用-R选项) 今天下午尝试使用libosip2,安装比较简单,按照自带的help文档 ...
- Linux导出函数控制,linux 下仅导出指定函数的方法
节整理资料时,发现了这个,是两年前在 LOVEUNIX 上的回帖.自己都忘了,贴在这里 做个备份. linux 也有导出文件.不用特定的扩展名,且不是在 gcc 中指定参数,而是在 ld 中. 写一个 ...
- linux导出硬件信息,Linux 上生成硬件信息与配置报告: Sysreport
当需要 Linux 主机详细完整的描述给另一个人的时候,这个工具非常适合.用 root 用户之行,但要注意最好不要抓取 currently installed packages 信息,这一步非常慢.( ...
- oracle中aix至Linux导出,aix 迁移linux oracle数据库
EBS R12的11g库从AIX迁移到Linux不能采用 Cross Platform Incremental Backup 的原因 详见红色字体部分,估计是EBS中一些特殊的object不适用这种方 ...
- 怎么linux中创建虚拟路径,linux服务器创建虚拟路径解决文件上传路径隔离问题...
需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...
- Android 路径(Path)与剪裁(Clipping)详解
转自:http://blog.csdn.net/bigdavidwli007/article/details/8930640 在定义各种形状的view的需求驱使下 ,在网上找到这片文章,貌似看的人很少 ...
- Linux之搜索路径PATH
Linux之搜索路径PATH 外部和内部命令 shell的命令分为两种:内部命令和外部命令 内部命令:简称builtin,由shell自身解析并执行,在shell自己的进程内执行 外部命令:shell ...
- Linux的cuda安装找不到路径,Cuda安装详细步骤
为了学习Caffe新买了笔记本,安装cuda时遇到了很多问题,不过好在都成功的解决了. 网上有很多cuda的安装教程,每个人的电脑配置不同遇到的问题也不一样,现在就我自己的安装配置情况总结一下具体的安 ...
最新文章
- python模拟高并发_Python基于gevent实现高并发代码实例
- 【计算理论】图灵机 ( 接受状态作用 | 格局 | 图灵机语言 | 图灵机设计复杂性 )
- TLS回调函数(2)
- ftp linux 开启验证_在linux中开启ftp服务
- 非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!
- 我年薪百万,孩子教育花掉一半
- C语言中的多字节字符与宽字符
- Mysql Sql语句令某字段值等于原值加上一个字符串
- 腾讯自己与自己的战争
- html自定义修改单选框多选框样式以及获取选中的值
- python常用模块之time
- 移动硬盘变成RAW怎么办?跟我这样恢复数据
- PHP服务端 苹果支付(IAP)处理
- 创意h5游戏案例:记忆类H5手机游戏评测
- 深圳超美海边烧烤场 深圳户外烧烤攻略
- visio的使用技巧
- C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式
- http常见状态返回码
- 点石成金:“硅业报国”不仅是理念
- LDO输出为什么并联接地电阻?