檔案系統之open

2021-07-13 18:10:52 字數 1733 閱讀 8247

在檔案讀寫之前,我們必須先開啟檔案。從應用程式的角度來看,這是通過標準庫的open函式完成的,該函式返回乙個檔案描述符。核心中是由系統呼叫do_sys_open()函式完成。

//系統呼叫

syscall_define3(open...)

//具體實現

long do_sys_open(int dfd, const

char __user *filename, int flags, umode_t mode)

else

}putname(tmp);

return fd;

}

//開啟檔案具體實現

struct file *do_filp_open(int dfd, struct filename *pathname,

const

struct open_flags *op)

//nameidata結構說明:nameidata在開啟每一層目錄項時是變化的,主要用於記錄當前檔案系統current->vfsmount和current->dentry.

struct nameidata ;

static

struct file *path_openat(struct nameidata *nd,

const

struct open_flags *op, unsigned flags)

}}

static

int link_path_walk(const

char *name, struct nameidata *nd)

}static

int walk_component(struct nameidata *nd, int flags)

err = lookup_fast(nd, &path, &inode, &seq); //搜尋dentry cache

if (unlikely(err <= 0))

path.mnt = nd->path.mnt;

err = follow_managed(&path, nd);

if (unlikely(err < 0))

return err;

seq = 0; /* we are already out of rcu mode */

inode = d_backing_inode(path.dentry);

}}

static

int do_last(struct nameidata *nd,struct file *file, const

struct open_flags *op,int *opened)

//呼叫vfs_open開啟目標檔案

vfs_open(&nd->path, file, current_cred()); //開啟目標檔案

//呼叫do_dentry_open

do_dentry_open(file, inode, null, cred);

//將目標檔案inode對應的具體檔案操作函式賦給file結構

f->f_op = fops_get(inode->i_fop);

//呼叫具體檔案系統的open函式開啟檔案,後續就可以進行檔案讀寫操作了

error = open(inode, f);

檔案系統之製作檔案系統

3 格式化 製作檔案系統 4 掛載 root localhost fdisk l dev sda 磁碟 dev sda 21.5 gb,21474836480 位元組,41943040 個扇區 units 扇區 of 1 512 512 bytes 扇區大小 邏輯 物理 512 位元組 512 位元...

linux之檔案系統

概述 1.應用層訪問具體檔案的層次圖 2.3.4.5.6.一 應用層訪問具體檔案的層次圖 結構圖 檔案與檔案系統的關係 從上圖中我們看出,檔案首先分類,歸屬於不同的檔案系統 檔案與程序之間的關係 程序與檔案的連線,即 已開啟檔案 是程序的私有財產,歸具體程序所有,那麼這種連線的file結構必然與程序...

php 之檔案系統

例 readfile d zhangsansvn readme.md string file get contents string filename 功能 傳入乙個檔案或檔案路徑,開啟這個檔案返回檔案的內容。檔案的內容是乙個字串。resource fopen string 檔名,string 模式...