-
Notifications
You must be signed in to change notification settings - Fork 0
/
simsys.h
82 lines (67 loc) · 1.65 KB
/
simsys.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef _SIMSYS_H_
#define _SIMSYS_H_
/**
* I pledge my honor that I have abided by the Stevens Honor System.
* Christopher Hittner
* James Romph
*/
#include "dirtree.h"
/**
* Initializes the filesystem. SHOULD ONLY BE CALLED ONCE!
*/
void init_filesystem(long blks, long size);
/**
* Nullifies the filesystem (init_filesystem will need to be re-called).
* EQUIVALENT TO 'sudo rm -rf /' with any relevant flags. Frees any memory
* associated with the simulated filesystem.
*/
void flush_filesystem();
DirTree getRootNode();
DirTree getWorkDirNode();
/**
* Sets the directory tree node that is currently the working directory.
* Commands are run based on the value of the working node.
*/
void setWorkDirNode(DirTree);
/**
* Returns the size of a block, in bytes.
*/
long blockSize();
/* The total number of blocks available on the system */
long numBlocks();
long numSectors();
/**
* Frees a given block of memory.
*
* n - The block to free
*/
void freeBlock(long n);
/**
* Allocates a single block of memory.
*
* return - The block number allocated, or -1 if an error.
*/
long allocBlock();
/**
* Determines whether or not there exists enough memory to
* allocate the number of given bytes.
*
* n - The number of blocks requested.
*
* return - Whether or not n blocks can be requested.
*/
int enoughMemFor(long n);
/**
* Get the list of allocated sectors.
*/
LList getAllocData();
long blocksAllocated();
long nextBlock();
/**
* Gets a relative node in the tree structure.
* tree - A subtree known to be a child of root.
* path - A tokenized path between tree and the
* destination.
*/
DirTree getRelTree(DirTree, char**);
#endif