Διαχείριση αρχείων

Η διαχείριση αρχείων βασίζεται στη δομή δεδομένων του πίνακα δεικτών, inode, η οποία περιέχει πληροφορίες για κάθε αρχείο. Τα βασικά στοιχεία της δομής που βρίσκονται στη μνήμη περιέχουν στοιχεία για τη διαχείριση του πίνακα των δεικτών:
struct inode {
        struct   lock i_lock;   /* Inode lock. >Keep this first< */
        LIST_ENTRY(inode) i_hash;/* Hash chain. */
        struct  vnode  *i_vnode;/* Vnode associated with this inode. */
        struct  vnode  *i_devvp;/* Vnode for block I/O. */
        u_int32_t i_flag;       /* flags, see below */
        dev_t     i_dev;        /* Device associated with the inode. */
        ino_t     i_number;     /* The identity of the inode. */

        union {                 /* Associated filesystem. */
                struct  fs *fs;         /* FFS */
                struct  lfs *lfs;       /* LFS */
                struct  ext2_sb_info *e2fs;     /* EXT2FS */
        } inode_u;
        struct   dquot *i_dquot[MAXQUOTAS]; /* Dquot structures. */
        u_quad_t i_modrev;      /* Revision level for NFS lease. */
        struct   lockf *i_lockf;/* Head of byte-level lock list. */
        /*
         * The on-disk dinode itself.
         */
        struct  dinode i_din;   /* 128 bytes of the on-disk dinode. */
};
Επιπλεόν το τμήμα κάθε πίνακα δεικτών που βρίσκεται στο δίσκο περιέχει τα ιδιοχαρακτηριστικά του αρχείου, δείκτες για τα τμήματα που περιέχουν δεδομένα του αρχείου, καθώς και δείκτες σε τμήματα που περιέχουν δείκτες σε τμήματα που περιέχουν δεδομένα του αρχείου.
struct dinode {
        u_int16_t       di_mode;        /*   0: IFMT, permissions; see below. */
        int16_t         di_nlink;       /*   2: File link count. */
        u_int64_t       di_size;        /*   8: File byte count. */
        int32_t         di_atime;       /*  16: Last access time. */
        int32_t         di_atimensec;   /*  20: Last access time. */
        int32_t         di_mtime;       /*  24: Last modified time. */
        int32_t         di_mtimensec;   /*  28: Last modified time. */
        int32_t         di_ctime;       /*  32: Last inode change time. */
        int32_t         di_ctimensec;   /*  36: Last inode change time. */
        ufs_daddr_t     di_db[NDADDR];  /*  40: Direct disk blocks. */
        ufs_daddr_t     di_ib[NIADDR];  /*  88: Indirect disk blocks. */
        u_int32_t       di_flags;       /* 100: Status flags (chflags). */
        int32_t         di_blocks;      /* 104: Blocks actually held. */
        int32_t         di_gen;         /* 108: Generation number. */
        u_int32_t       di_uid;         /* 112: File owner. */
        u_int32_t       di_gid;         /* 116: File group. */
        int32_t         di_spare[2];    /* 120: Reserved; currently unused */
};