📄 directory.h
字号:
// directory.h // Data structures to manage a UNIX-like directory of file names.// // A directory is a table of pairs: <file name, sector #>,// giving the name of each file in the directory, and // where to find its file header (the data structure describing// where to find the file's data blocks) on disk.//// We assume mutual exclusion is provided by the caller.//// Copyright (c) 1992-1993 The Regents of the University of California.// All rights reserved. See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#include "copyright.h"#ifndef DIRECTORY_H#define DIRECTORY_H#include "openfile.h"#define FileNameMaxLen 9 // for simplicity, we assume // file names are <= 9 characters long// The following class defines a "directory entry", representing a file// in the directory. Each entry gives the name of the file, and where// the file's header is to be found on disk.//// Internal data structures kept public so that Directory operations can// access them directly.class DirectoryEntry { public: bool inUse; // Is this directory entry in use? int sector; // Location on disk to find the // FileHeader for this file char name[FileNameMaxLen + 1]; // Text name for file, with +1 for // the trailing '\0'};// The following class defines a UNIX-like "directory". Each entry in// the directory describes a file, and where to find it on disk.//// The directory data structure can be stored in memory, or on disk.// When it is on disk, it is stored as a regular Nachos file.//// The constructor initializes a directory structure in memory; the// FetchFrom/WriteBack operations shuffle the directory information// from/to disk. class Directory { public: Directory(int size); // Initialize an empty directory // with space for "size" files ~Directory(); // De-allocate the directory void FetchFrom(OpenFile *file); // Init directory contents from disk void WriteBack(OpenFile *file); // Write modifications to // directory contents back to disk int Find(char *name); // Find the sector number of the // FileHeader for file: "name" bool Add(char *name, int newSector); // Add a file name into the directory bool Remove(char *name); // Remove a file from the directory void List(); // Print the names of all the files // in the directory void Print(); // Verbose print of the contents // of the directory -- all the file // names and their contents. private: int tableSize; // Number of directory entries DirectoryEntry *table; // Table of pairs: // <file name, file header location> int FindIndex(char *name); // Find the index into the directory // table corresponding to "name"};#endif // DIRECTORY_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -