6.2.5 The file structure

マルチタスクシステムでは,多くのプロセスが同時に,読み込みと書き込みのためにファイルにアクセスしようとすることがよくある.ひとつのプロセスであっても,ファイル内の異なるところで読み込みと書き込みをするだろう.同期の問題を回避し,異なるプロセスがファイルへの共有アクセスを可能にするために,UNIXは別途構造体を導入している.

include/linux/fs.h

struct file {
    mode_t f_mode; /* 特定のファイルのアクセス権 */
    loff_t f_pos; /* 現在のファイルの位置 */
    unsigned short f_flags; /* アクセスの種類 */
    unsigned short f_count; /* アクセス数 */
    off_t f_reada;
    struct file *f_next, *f_prev;
    int f_owner;        /* pidか-pgrpならSIGIOを送信する必要がある */
    struct inode * f_inode;
    struct file_operations * f_op;
    unsigned long f_version;
    void *private_data; /* ttyドライバなどが必要とする */
};

ファイル構造体はf_nextf_prevポインタを介した2重連結循環リストで管理され,このファイルテーブルはfirst_fileポインタを介してアクセスできる.