在檔案讀寫之前,我們必須先開啟檔案。從應用程式的角度來看,這是通過標準庫的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 模式...