FAT32 Directory Entries and Operations Guide Operating Systems CS3430

advertisement
FAT32 Directory Entries and
Operations Guide
Operating Systems
CS3430
Sarah Diesburg
1
Outline

Directory entries


Short-name and long-name entries
Project 3 operations
2
Directory Entries
3
Directory Entries


Lists names of files and directories in a
directory
Types


Short-name directory entry
Long-name directory entry
4
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
5
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
6
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
7
Long-name Directory Entry
Long-name part 1
Long-name part 2
Two long-name
entries are needed to
hold the file name
Short-name
8
Long-name Directory Entry
Long-name part 1
Long-name part 2
Short-name
Short name entry for
the file must exist too
9
Long-name Directory Entry
Long-name part 1
Long-name part 2
Long-name entries
for this file
immediately precede
short-name entry
Short-name
10
Directory entries

Long-name entry for “fatgen103.pdf"
11
Directory entries

Short-name entry for “fatgen103.pdf"
12
Long-name Directory Entries

You can ignore the long directory entries


Can just display the short names
This makes the project easier
13
“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?
14
Directory Entry Attributes

Offset 11 in directory entry, 1 byte long







ATTR_READ_ONLY 0x01
ATTR_HIDDEN 0x02
ATTR_SYSTEM 0x04
ATTR_VOLUME_ID 0x08
ATTR_DIRECTORY 0x10
ATTR_ARCHIVE 0x20
ATTR_LONG_NAME

ATTR_READ_ONLY | ATTR_HIDDEN |
ATTR_SYSTEM | ATTR_VOLUME_ID
15
Checking the Image…

You can tell your OS to “mount” the image
just like a real file system
$> sudo mount –o loop fat32.img /mnt
$> cd /mnt

$> sudo umount /mnt



Be sure you cd out of the /mnt directory first
16
Checking the Image


Mac computer automatically mount the image
They also *modify* it



Add Trash can directory
Add other files
Your test image may become different than
other people’s images
17
Utility Operations
18
FAT32 Utility Oprations
Utility recognizes the following built-in commands:




info
stat
volume
cd


ls
read
19
Precautions


File or directory must exist before performing
operations on it
Be sure you are reading from the right
location

Off by 1 byte can throw whole project off
20
Volume

Volume ID string exists in two places



Boot sector
Root directory
Can get it either place
21
stat
Check that provided file name exists in the
requested directory
1.

Can be accomplished by seeking through the
clusters of the requested directory
If it does, extract the size information
2.

Pay attention to endianness!
ls
1.
2.
3.
4.
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
cd
Check that provided directory name is a
directory and exists
Alter your current working directory to reflect
the change
1.
2.

For ease of debugging and use, you may want to
alter your prompt to show current working
directory
I/O Files
/] read FATINFO.TXT 0 100


Only allow the read if fatinfo.txt is open
In order to read fatinfo.txt, you must look
into the open file table, look up the address
of fatinfo.txt (or store it with its name), and
read enough of the data clusters to satisfy
the read request
read
1.
2.
3.
4.
5.
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
Other Things



Be sure to look at the Project 3 Use Cases
document and make sure you code acts the
same way.
You must read the Microsoft FAT32
Specification to understand what’s going on
Be sure your code works on the class virtual
machine

You may need to boot into the original kernel
27
Related documents
Download