Linux内核中通过文件描述符获取绝对路径
浏览:2972次 出处信息
背景
在Linux内核中,已知一个进程的pid和其打开文件的文件描述符fd,如何获取该文件的绝对路径。
相关原理
1.通过进程pid获取进程描述符task_struct;
2.通过task_struct获取该进程打开文件结构files_struct,从而获取文件描述符表;
3.以fd为索引在文件描述符表中获取对应文件的结构体file;
4.通过file获取对应path结构,该结构封装当前文件对应的dentry和挂载点;
5.通过内核函数d_path()获取该文件的绝对路径;
实现方法
通过进程pid获取进程描述符demo:
1 | structtask_struct *get_proc(pid_t pid) |
2 | { |
3 | structpid *pid_struct = NULL; |
4 | structtask_struct *mytask = NULL; |
5 |
6 | pid_struct = find_get_pid(pid); |
7 | if(!pid_struct) |
8 | returnNULL; |
9 | mytask = pid_task(pid_struct, PIDTYPE_PID); |
10 | returnmytask; |
11 | } |
通过fd以及d_path()获取绝对路径demo:
1 | intget_path(structtask_struct *mytask, intfd) |
2 | { |
3 | structfile *myfile = NULL; |
4 | structfiles_struct *files = NULL; |
5 | charpath[100] = {'\0'}; |
6 | char*ppath = path; |
7 |
8 | files = mytask->files; |
9 | if(!files) { |
10 | printk("files is null..\n"); |
11 | return-1; |
12 | } |
13 | myfile = files->fdt->fd[fd]; |
14 | if(!myfile) { |
15 | printk("myfile is null..\n"); |
16 | return-1; |
17 | } |
18 | ppath = d_path(&(myfile->f_path), ppath, 100); |
19 |
20 | printk("path:%s\n", ppath); |
21 | return0; |
22 | } |
建议继续学习:
- Linux 系统文件描述符继承带来的危害 (阅读:3339)
- Zend Parameters Parser新增类型描述符介绍 (阅读:3037)
- 使用Javascript获取页面所在目录的绝对路径 (阅读:2426)
- Bash 中的 & 符号和文件描述符 (阅读:1839)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Bash的模式和配置文件加载
后一篇:linux下cp,mv进行动态库覆盖问题分析 >>
文章信息
- 作者:edsionte 来源: edsionte's TechBlog
- 标签: 描述符 绝对路径
- 发布时间:2014-03-19 22:26:07
建议继续学习
近3天十大热文
-
[917] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[53] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] Innodb分表太多或者表分区太多,会导致内 -
[52] 海量小文件存储 -
[51] 全站换域名时利用nginx和javascri -
[51] 用 Jquery 模拟 select -
[50] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南
