Linux核心中檔案操作函式整理
1.判斷檔案是否存在
struct file *filp = NULL;
filp = filp_open("/etc/passwd", O_RDONLY, 0);
if (IS_ERR(filp)) {
printk("Cannot open ......\n");
}
2.根據描述符查詢路徑
在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 |
struct task_struct
*get_proc(pid_t pid) |
2 |
{ |
3 |
struct pid
*pid_struct = NULL; |
4 |
struct task_struct
*mytask = NULL; |
5 |
6 |
pid_struct
= find_get_pid(pid); |
7 |
if (!pid_struct) |
8 |
return NULL; |
9 |
mytask
= pid_task(pid_struct, PIDTYPE_PID); |
10 |
return mytask; |
11 |
} |
通過fd以及d_path()獲取絕對路徑demo:
1 |
int get_path(
|