Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // create file system
- int mksfs(int fresh){
- // allocate disk space
- int result;
- char *filename = "Simple File System";
- int block_size = MY_BLOCK_SIZE;
- int num_blocks = MY_NUM_BLOCK;
- if (fresh == 1) {
- result = init_fresh_disk(filename, block_size, num_blocks);
- } else {
- result = init_disk(filename, block_size, num_blocks);
- }
- // create partition : super block
- super_block* sb = malloc(1 * sizeof(super_block));
- sb->magic = 0;
- sb->block_size = block_size;
- sb->file_system_size = num_blocks * block_size;
- sb->i_node_table_length = INODE_TABLE_LENGTH;
- write_blocks(SUPER_BLOCK_INDEX, SUPER_BLOCK_LENGTH, sb);
- // create partition : i-node table
- inode* it_buffer = malloc(INODE_TABLE_LENGTH * sizeof(inode));
- write_blocks(INODE_TABLE_INDEX, INODE_TABLE_LENGTH, it_buffer);
- // create partition : directory table, it stores filename->inode pairs
- filename_to_inode* dt_buffer = malloc(INODE_TABLE_LENGTH * sizeof(inode));
- write_blocks(DIRECTORY_TABLE_INDEX, DIRECTORY_TABLE_LENGTH, dt_buffer);
- // create partition : data blocks
- // rest : free bitmap
- // cache inode table to memory
- cached_inode_table = malloc(INODE_TABLE_LENGTH * block_size);
- read_blocks(INODE_TABLE_INDEX, INODE_TABLE_LENGTH, cached_inode_table);
- // cache directory table into memory
- cached_directory_table = malloc(DIRECTORY_TABLE_LENGTH * block_size);
- read_blocks(DIRECTORY_TABLE_INDEX, DIRECTORY_TABLE_LENGTH, cached_directory_table);
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement