Show page source of internal22-123-ファイル操作 #25322

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:ファイル操作
}}}
 

= ファイル操作 = #SECTION03810000000000000000

ファイルに対するアクセス方法は、各ファイルシステム内で定義し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 [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1

[[PageNavi(internal22-navi)]]