PSFS is an on-disk EXT1 based persistent filesytem implementation. It supports both file and directory based operations.
/* Structure for superblock */typedefstructsuper_block {
uint32_tmagic_number; // File system magic numberuint32_tblocks; // Number of blocks in file system (except super block)uint32_tinode_blocks; // Number of blocks reserved for inodes == 10% of Blocksuint32_tinodes; // Number of inodes in file system == length of inode bit mapuint32_tinode_bitmap_block_idx; // Block Number of the first inode bit map blockuint32_tinode_block_idx; // Block Number of the first inode blockuint32_tdata_block_bitmap_idx; // Block number of the first data bitmap blockuint32_tdata_block_idx; // Block number of the first data blockuint32_tdata_blocks; // Number of blocks reserved as data blocks
} super_block;/* This is the structure for inodes*/typedefstructinode {
uint32_tvalid; // 0 if invaliduint32_tsize; // logical size of the fileuint32_tdirect[5]; // direct data block pointeruint32_tindirect; // indirect pointer
} inode;/* This is the structure written to directories */typedefstructchild {
intvalid; // valid or notinttype; // directory or filecharname[MAX_FILENAME]; // Maximum length of a directory/file nameintlength; // length of the directory / file nameintinumber; // inode no of the directory / file
} child;intformat(disk*diskptr);
intmount(disk*diskptr);
intcreate_file();
intremove_file(intinumber);
intstat(intinumber);
intread_i(intinumber, char*data, intlength, intoffset);
intwrite_i(intinumber, char*data, intlength, intoffset);
intfit_to_size(intinumber, intsize);