[SOLVED] CS file system #include filesys/filesys.h

$25

File Name: CS_file_system_#include_filesys/filesys.h.zip
File Size: 386.22 KB

5/5 - (1 vote)

#include filesys/filesys.h
#include
#include
#include
#include filesys/file.h
#include filesys/free-map.h
#include filesys/inode.h
#include filesys/directory.h

/* Partition that contains the file system. */
struct block *fs_device;

static void do_format (void);

/* Initializes the file system module.
If FORMAT is true, reformats the file system. */
void
filesys_init (bool format)
{
fs_device = block_get_role (BLOCK_FILESYS);
if (fs_device == NULL)
PANIC (No file system device found, cant initialize file system.);

inode_init ();
free_map_init ();

if (format)
do_format ();

free_map_open ();
}

/* Shuts down the file system module, writing any unwritten data
to disk. */
void
filesys_done (void)
{
free_map_close ();
}

/* Creates a file named NAME with the given INITIAL_SIZE.
Returns true if successful, false otherwise.
Fails if a file named NAME already exists,
or if internal memory allocation fails. */
bool
filesys_create (const char *name, off_t initial_size)
{
block_sector_t inode_sector = 0;
struct dir *dir = dir_open_root ();
bool success = (dir != NULL
&& free_map_allocate (1, &inode_sector)
&& inode_create (inode_sector, initial_size)
&& dir_add (dir, name, inode_sector));
if (!success && inode_sector != 0)
free_map_release (inode_sector, 1);
dir_close (dir);

return success;
}

/* Opens the file with the given NAME.
Returns the new file if successful or a null pointer
otherwise.
Fails if no file named NAME exists,
or if an internal memory allocation fails. */
struct file *
filesys_open (const char *name)
{
struct dir *dir = dir_open_root ();
struct inode *inode = NULL;

if (dir != NULL)
dir_lookup (dir, name, &inode);
dir_close (dir);

return file_open (inode);
}

/* Deletes the file named NAME.
Returns true if successful, false on failure.
Fails if no file named NAME exists,
or if an internal memory allocation fails. */
bool
filesys_remove (const char *name)
{
struct dir *dir = dir_open_root ();
bool success = dir != NULL && dir_remove (dir, name);
dir_close (dir);

return success;
}

/* Formats the file system. */
static void
do_format (void)
{
printf (Formatting file system);
free_map_create ();
if (!dir_create (ROOT_DIR_SECTOR, 16))
PANIC (root directory creation failed);
free_map_close ();
printf (done.
);
}

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] CS file system #include filesys/filesys.h
$25