日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/5/22 linux 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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篇【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。