510 likes | 632 Views
Week 12 FAT32 Utility Operations Guide. Classes COP4610 / CGS5765 Florida State University. Outline. Directory entries Short-name and long-name entries Read-only project 3 operations Other non-read-only project 3 operations. Directory Entries. Directory Entries.
E N D
Week 12 FAT32 Utility Operations Guide Classes COP4610 / CGS5765 Florida State University
Outline • Directory entries • Short-name and long-name entries • Read-only project 3 operations • Other non-read-only project 3 operations
Directory Entries • Lists names of files and directories in a directory • Types • Short-name directory entry • Long-name directory entry
Short-name Directory Entry • Limits name size to 8 bytes with additional 3 bytes after “.” • Compatible with previous FAT versions • 32 bytes total size • Holds important information about file or dir: • Attributes, timestamp, last access date, first cluster number, size
Short-name Directory Entry • If DIR_Name[0] == 0xE5, then the directory entry is free (no file or directory name in this entry) • If DIR_Name[0] == 0x00, then the directory entry is free (same as for 0xE5), and there are no allocated directory entries after this one
Long-name Directory Entry • Backwards-compatible way to allow longer names to be displayed • Each long-name directory entry is 32 bytes • A long file name can cover a set of long-name directory entries • Each set of long-name directory entries must correspond to a short-name directory entry • Long-name entries must immediately precede corresponding short-name entry
Long-name Directory Entry Long-name part 1 Two long-name entries are needed to hold the file name Long-name part 2 Short-name
Long-name Directory Entry Long-name part 1 Long-name part 2 Short name entry for the file must exist too Short-name
Long-name Directory Entry Long-name part 1 Long-name entries for this file immediately precede short-name entry Long-name part 2 Short-name
Directory entries • Long-name entry for “fatgen103.pdf"
Directory entries • Short-name entry for “fatgen103.pdf"
Long-name Directory Entries • You can ignore the long directory entries • Can just display the short names • This makes the project easier
“Dot” Entries • All directories (except root directory of entire system) have “.” and “..” directory entries • “.” means “this directory” • “..” means “the parent directory” • Why do you think the root directory does not have these entries?
Directory Entry Attributes • Offset 11 in directory entry, 1 byte long • Attributes of interest • ATTR_READ_ONLY 0x01 • ATTR_DIRECTORY 0x10 • ATTR_ARCHIVE 0X20 • Set by FAT drivers when file is created, renamed, or written to
FAT32 Utility Oprations • open • close • create • rm • size • cd • ls • mkdir • rmdir • read • write Utility recognizes the following built-in commands:
A Few Definitions • Read-Only Operations –can be completed without modifying file system image • Write Operations – must modify file system image to complete • Hint: Do the read-only operations first since they should not corrupt your image
FAT32 Utility Operations Classified Read-Only Write create rm** mkdir rmdir** write • open • close • ls • size • cd • read **Will go over rm and rmdir next week
Read-Only Precautions • File or directory must exist before performing operations on it • File must be open and flagged for reading before you attempt to read from it • Be sure you are reading from the right location • Off by 1 byte can throw whole project off
Read-Only Operation: open • Check if the file is already open • Check that the mode-specifiers are valid (r, w, rw, or wr) • Check that the provided file name exists in the requested directory • If it exists, add the file to your open file table with mode-specifiers (at least)
open Use Cases • Successful open /] open FATINFO.TXT rw /] • Unsuccessful open /] open FATINFO.TXT rw Error: already open! /]
open Use Cases • Unsuccessful open /] open NOTHERE.TXT rw Error: does not exist /] • Unsuccessful open /] open DIRS rw Error: cannot open a directory /]
open Use Cases • Unsuccessful open /] open FATINFO.TXT z Error: incorrect parameter /]
Read-Only Operation: close • Check that the file name provided exists in your open file table • If it does, remove that entry from your open file table
close Use Cases • Successful close /] close FATINFO.TXT /] • Unsuccessful close /] close NOTHERE.TXT Error: file not in open file table /]
Read-Only Operation: ls • Make sure that provided directory name is directory and exists in requested directory • Seek first data cluster • Iterate through and print each directory entry in the cluster • If more directory entries left than first cluster can hold, seek next cluster and repeat 3
ls Use Cases • Successful ls /DIRS/] ls . . .. A B C D /DIRS/]
Read-Only Operation: size • Check that provided file name exists in the requested directory • Can be accomplished by seeking through the clusters of the requested directory • If it does, extract the size information • Pay attention to endianness!
size Use Cases • Successful size /FILES/] size CONST.TXT 45119 /FILES/] • Unsuccessful size /FILES/] size NOTHERE.TXT Error: file does not exist /FILES/]
Read-Only Operation: cd • Check that provided directory name is a directory and exists • Alter your current working directory to reflect the change • For ease of debugging and use, you may want to alter your prompt to show current working directory
cd Use Cases • Successful cd /] cd FILES /FILES/] • Unsuccessful cd /] cd FATINFO.TXT Error: not a directory /]
cd Use Cases • Unsuccessful cd /] cd NOTHERE Error: does not exist /]
Read-Only Operation: read • Make sure file name provided is in open-file table and flagged as read-capable • Check that the provided position is valid • Check that the requested number of bytes is valid • Seek to data cluster corresponding to the requested start position and begin reading • If more data to be read, seek the next clusters and repeat 4
read Use Cases • Successful read /FILES/] read CONST.TXT 0 15 Provided by USC /FILES/] • Unsuccessful read /FILES/] read EMPTY.TXT 45 99 Error: attempt to read beyond EoF /FILES/]
Write Precautions • File must be open and flagged fro writing before you attempt to write to it • Make sure an entry name is not a directory before you try to write to it • Check how much space is left in a cluster when writing a new string • Don’t want to overwrite other pre-existing data
Write Operations • Many write operations may involve allocating a new cluster
Allocating a New Cluster • Search the FAT table for any free clusters • If none, return an out of space error! • Set the previous cluster to point to the new cluster number • Watch out, there may be more than one FAT to update • Set the new cluster to EoC (end of cluster chain)
Write Operations • Many write operations involve creating a new directory entry
Creating a New Directory Entry • Just create a short-name directory entry • All new directories will be of length 8 characters or less
Write Operation: write • Check that the parameters passed are valid (as for the read operation) • Seek the data cluster position requested by the operation • Write as much data as you can fit starting at the requested position up until the end of a given cluster • If a cluster fills up, allocate a new cluster • Repeat 3-4 until the write is complete
write Use Cases • Successful write /FILES/] open EMPTY.TXT rw /FILES/] write EMPTY.TXT 0 10 “Not empty!” /FILES/] • Unsuccessful write /FILES/] open EMPTY.TXT r /FILES/] write EMPTY.TXT 0 10 “Not empty!” Error: File is not open for writing /FILES/]
write Use Cases • Unsuccessful write /FILES/] write EMPTY.TXT 0 10 “Not empty!” Error: File not found in open file table /FILES/]
Write Operation: create • Make sure the requested file name does NOT exist in the requested location • Create new directory entry for the file • If there is enough room in the current cluster, write it there • If there is not enough space left in the cluster, allocate a new cluster and write it in the new cluster
create Use Cases • Successful create /FILES/] create HELLO.TXT /FILES/] ls . .. CONST.TXT EMPTY.TXT HELLO.TXT /FILES/] • Unsuccessful create /FILES/] create EMPTY.TXT Error: File already exists /FILES/]
Write Operation: mkdir • Similar to create, except give the directory entry the proper directory attribute
mkdir Use Cases • Successful mkdir /DIRS/] mkdir NEW /DIRS/] ls . .. NEW A B C D /DIRS/]
mkdir Use Cases • Unsuccessful mkdir /DIRS/] mkdir A Error: directory already exists /DIRS/]