linux 内核 遍历文件夹,Linux内核中通过文件描述符获取绝对路径
背景
在Linux内核中,已知一个进程的pid和其打开文件的文件描述符fd,如何获取该文件的绝对路径?基本思路是先获取该文件在内核中的file结构体,再通过d_path()获取到整个文件的绝对路径。
方法一
如果理解了进程和文件系统数据结构之间的关系,那么这种方法可以采用。基本的方法如下:
1.通过进程pid获取进程描述符task_struct;
2.通过task_struct获取该进程打开文件结构files_struct,从而获取文件描述符表;
3.以fd为索引在文件描述符表中获取对应文件的结构体file;
4.通过file获取对应path结构,该结构封装当前文件对应的dentry和挂载点;
5.通过内核函数d_path()获取该文件的绝对路径;
通过进程pid获取进程描述符demo:
struct task_struct *get_proc(pid_t pid)
{
struct pid *pid_struct = NULL;
struct task_struct *mytask = NULL;
pid_struct = find_get_pid(pid);
if (!pid_struct)
return NULL;
mytask = pid_task(pid_struct, PIDTYPE_PID);
return mytask;
}
通过fd以及d_path()获取绝对路径demo:
int get_path(struct task_struct *mytask, int fd)
{
struct file *myfile = NULL;
struct files_struct *files = NULL;
char path[100] = {'\0'};
char *ppath = path;
files = mytask->files;
if (!files) {
printk("files is null..\n");
return -1;
}
myfile = files->fdt->fd[fd];
if (!myfile) {
printk("myfile is null..\n");
return -1;
}
ppath = d_path(&(myfile->f_path), ppath, 100);
printk("path:%s\n", ppath);
return 0;
}
从上面的代码可以看出,从fd到file结构的获取均通过各个数据结构之间的指向关系获取。
方法二
与方法一的思路相同,但是可以直接使用内核提供的函数fget()进行fd到file的获取。这种方法使用比较简单,程序更加安全,不过就是少了对数据结构关系的思考过程。其实也可以将fget()函数的实现过程作为参考,欣赏内核中代码实现的严谨性。
linux 内核 遍历文件夹,Linux内核中通过文件描述符获取绝对路径相关推荐
- r指引到文件夹_R语言中进行文件夹及文件夹内文件操作范例
rm(list=ls()) path = 'J:/lab/EX29 –在R语言中进行文件(夹)操作' setwd(path) cat("file A\n", file=" ...
- linux苹果photodata文件夹,iPhone系统文件夹中的文件及用途
花了2天时间研究iPhone中锁屏图片和墙纸到底存放在哪个文件夹,最终终于找到是这2个文件: Library/SpringBoard/LockBackground.cpbitmap Library/S ...
- win7计算机管理找不到文件夹,win7系统中电脑文件夹选项不见了的具体解决方法...
最近总会遇见一些用户们在使用win7系统的时候,出现电脑文件夹选项不见了的情况,要怎么处理呢?今日在这里就呈现了win7系统中电脑文件夹选项不见了的具体解决方法. 解决方法一: 1.通过资源管理--- ...
- 计算机考试哪个是考试文件夹,计算机考试中考生文件夹下的子文件夹在哪个磁盘中找??...
满意答案 muxue8228 2015.08.21 采纳率:48% 等级:9 已帮助:517人 子文件夹应该在安装软件的那个磁盘里找.这个子文件夹一般在D盘,文件夹的名称是学生的编号. 在Win ...
- linux驱动内核哪个文件夹,linux设备驱动归纳总结(一):内核的相关基础概念...
linux设备驱动归纳总结(一):内核的相关基础概念 1. 内核与 linux 设备驱动的作用与关系 内核:用于管理软硬件资源,并提供运行环境.如分配 4G 虚拟空间等. linux 设备驱动:是连接 ...
- linux find 删除文件夹,linux中find与rm实现查找并删除目录或文件linux操作系统 -电脑资料...
在linux中find是查找搜索文件而rm是删除文件,下面我们来看一篇linux中find与rm实现查找并删除目录或文件的实例,希望文章对大家会有所帮助, 删除指定目录下指定文件 find 要查找的目 ...
- 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解
Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...
- linux scp 过滤文件夹,linux中使用scp远程拷贝文件及文件夹
linux中使用scp远程拷贝文件及文件夹 linux scp远程拷贝文件及文件夹,需要的朋友可以参考下 1.拷贝本机/home/wtf/test整个目录至远程主机192.168.100.1的/roo ...
- linux下无法删除文件夹,Linux空间中文件或文件夹无法删除的解决办法
我用的是Linux虚拟空间,每当升级论坛或博客程序后,就会有些旧的文件或文件夹异常"顽固"无法删除,不管是FTP工具还是WEB管理工具都没 辙,只得通知客服协助删除一下.不过总这样 ...
最新文章
- Modelsim仿真时不能编译`include文件解决办法
- 0004python中的map,reduce,lambda,filter
- Python程序设计题解【蓝桥杯官网题库】 DAY12-算法训练
- 雇水军刷分有效吗?虚假评论的影响研究分析
- java web项目在tomcat中以调试模式运行
- 【线段树】扇形面积并(P3997)
- 面试稳了!集齐几千名程序员精选的 100 道前端面试题!
- 融资13亿后突然死亡!首款产品被苹果点赞,与谷歌竞赛的明星创业公司Anki倒闭...
- Python Jquery学习
- macOS 12兼容机型列表 想知道你的Mac是否支持macOS Monterey吗?
- SSRS 2012 高级图表类型 -- 气泡图与散点图
- MySQL(6)-----数据类型
- 俄罗斯独立自主的计算机技术和计算机网络
- 远程服务器维护工具,免费小工具轻松实现多台服务器维护
- java 日程表_递归与分治策略之循环赛日程表Java实现
- 蔚来、小鹏、理想自动驾驶能力的纵向演进与横向比较
- html页面使用地图,前端PC端使用地图步骤(高德)
- extjs6 清除grid中combo列的值
- 【电路设计】晶振选择和负载容抗匹配参考指南
- 2021-10-30 字典
热门文章
- excel在线_Excel太难搞?有了它帮你自动生成,制作高大上图表,用过都说好
- HTML5期末大作业:美食介绍网站设计——河南美食介绍(4页) web期末作业设计网页_甜品美食大学生网页设计作业成品
- 迅为iTOP-3399开发板快速上手
- Ubuntu给clion添加快捷图标
- 文件加密打包和解密解包
- 小记MAC安装GIT
- JQuery Ajax局部刷新功能
- <<视觉问答>>2021:Learning Compositional Representation for Few-shot Visual Question Answering
- xfce桌面汉化(命令)
- 高压空气压缩机怎样选择