ファイル操作

ファイルに対するアクセス方法は、各ファイルシステム内で定義しinode_operations構造体とfile_operationsという二つのファイル操作関数テーブルを用意する。

ファイルopen時に各ファイルシステムがメモリiノードとfile構造体にその関数テーブルを登録する。以後この関数テーブル経由で、vfs側からファイル実体への操作が可能となる。

同じファイルシステムでも、ファイルの種類(通常ファイルとディレクトリなど)により、アクセス方法がことなるため、このテーブルはファイルの種類毎に用意することになる。

ファイル操作関数テーブル

struct file_operations {
        loff_t (*llseek) ();
        ssize_t (*read) ();
        ssize_t (*write) ();
        int (*readdir) ();
        unsigned int (*poll) ();
        int (*ioctl) ();
        int (*mmap) ();
        int (*open) ();
        int (*flush) ();
        int (*release) ();
        int (*fsync) ();
        int (*fasync) ();
        int (*check_media_change) ();
        int (*revalidate) ();
        int (*lock) ();
};

iノード操作関数テーブル

struct inode_operations {
        struct file_operations * default_file_ops;
        int (*create) ();
        int (*lookup) ();
        int (*link) ();
        int (*unlink) ();
        int (*symlink) ();
        int (*mkdir) ();
        int (*rmdir) ();
        int (*mknod) ();
        int (*rename) ();
        int (*readlink) ();
        struct dentry * (*follow_link) ();
        int (*readpage) ();
        int (*writepage) ();
        int (*bmap) ();
        void (*truncate) ();
        int (*permission) ();
        int (*smap) ();
        int (*updatepage) ();
        int (*revalidate) ();
};

(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1