私はオープン()システムコール構造体file_operationsと構造体のファイルを見つけるためにファイルの作成中に接続して取得し、次います。ファイルの作成中に、struct file_operationsとstruct fileがいつ接続されますか?
sys_open -> do_sys_open -> do_filp_open -> nameidata_to_filp -> __dentry_open
static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
int flags, struct file *f,
int (*open)(struct inode *, struct file *),
const struct cred *cred)
{
struct inode *inode;
int error;
f->f_flags = flags;
f->f_mode = ((flags+1) & O_ACCMODE) | FMODE_LSEEK |
FMODE_PREAD | FMODE_PWRITE;
inode = dentry->d_inode;
if (f->f_mode & FMODE_WRITE) {
error = __get_file_write_access(inode, mnt);
if (error)
goto cleanup_file;
if (!special_file(inode->i_mode))
file_take_write(f);
}
f->f_mapping = inode->i_mapping;
f->f_path.dentry = dentry;
f->f_path.mnt = mnt;
f->f_pos = 0;
f->f_op = fops_get(inode->i_fop);//I think it is here that they get connected
file_move(f, &inode->i_sb->s_files);
error = security_dentry_open(f);
...
しかし、としたが機能__dentry_openでは、iノード内i_fopが初期化されることを次のように
メインパスはありますか?
inodeは、ファイルの作成とともに作成されます。それはそこに生まれていない。したがって、iノードi_fopはどこかで初期化する必要があります。しかしここで? – sliter