The DOS Filesystem, fs-dos.so,
provides transparent access to
DOS disks, so you can treat DOS filesystems as though they were POSIX
filesystems. This transparency allows processes to operate on DOS files
without any special knowledge or work on their part.
The structure of the DOS filesystem on disk is old and
inefficient, and lacks many desirable features. Its only
major virtue is its portability to DOS and Windows
environments. You should choose this filesystem only if you
need to transport DOS files to other machines that require
it. Consider using the Power-Safe filesystem alone if DOS
file portability isn't an issue or in conjunction with the
DOS filesystem if it is.
If there's no DOS equivalent to a POSIX feature,
fs-dos.so,
with either return an error or a
reasonable default. For example, an attempt to create a
link()
will result in the appropriate
errno
being returned. On the other hand, if
there's an attempt to read the POSIX times on a file,
fs-dos.so will treat any of the unsupported
times the same as the last write time.
- DOS version support
- The fs-dos.so program supports
hard disk partitions from DOS version 2.1 to Windows 98 with long filenames.
- DOS text files
- DOS terminates each line in a text file with two characters
(CR/LF), while POSIX (and most other) systems terminate each
line with a single character (LF).
Note that fs-dos.so makes no attempt to translate text files
being read.
Most utilities and programs aren't affected by this difference.
Note also that some very old DOS programs may use a
CtrlZ (^Z) as a file
terminator.
This character is also passed through without modification.
- QNX-to-DOS filename mapping
- In DOS, a filename can't contain any of the following characters:
/ \ [ ] : * | + = ; , ?
An attempt to create a file that contains one of these
invalid characters will return an error. DOS (8.3 format)
also expects all alphabetical characters to be uppercase, so
fs-dos.so maps these characters to uppercase when
creating a filename on disk.
But it maps a filename to lowercase by default when returning a filename
to a QNX Neutrino application, so that QNX Neutrino users and programs
can always see and type lowercase
(via the sfn=sfn_mode option).
- Handling filenames
- You can specify how you want fs-dos.so to handle
long filenames (via the lfn=lfn_mode option):
- Ignore them—display/create only 8.3 filenames.
- Show them—if filenames are longer than 8.3 or if mixed case is used.
- Always create both short and long filenames.
If you use the ignore option, you can specify
whether or not to silently truncate filename characters beyond the 8.3 limit.
- International filenames
- The DOS filesystem supports DOS code pages
(international character sets) for locale filenames.
Short 8.3 names are stored using a particular character set
(typically the most common extended characters for a locale
are encoded in the 8th-bit character range).
All the common American as well as Western and Eastern European code pages
(437, 850, 852, 866, 1250, 1251, 1252) are supported.
If you produce software that must access a variety of DOS/Windows
hard disks, or operate in non-US-English countries, this
feature offers important portability—filenames will
be created with both a Unicode and locale name and are
accessible via either name.
Note:
The DOS filesystem supports international text in filenames only.
No attempt is made to be aware of data contents, with
the sole exception of Windows shortcut
(.LNK) files, which will be parsed and
translated into symbolic links if you've specified that
option (lnk=lnk_mode).
- DOS volume labels
- DOS uses the concept of a volume label, which is an actual
directory entry in the root of the DOS filesystem.
To distinguish between the volume label and an actual DOS directory,
fs-dos.so
reports the volume label according to the way you specify its
vollabel option.
You can choose to:
- Ignore the volume label.
- Display the volume label as a name-special file.
- Display the volume label as a name-special file with an equal sign
(=) as the first character of the volume name (the default).
- DOS-QNX permission mapping
- DOS doesn't support all the permission bits specified by POSIX.
It has a READ_ONLY bit in place of separate READ and
WRITE bits; it doesn't have an EXECUTE bit.
When a DOS file is created, the DOS READ_ONLY bit is set if all the
POSIX WRITE bits are off.
When a DOS file is accessed, the POSIX READ bit is always assumed
to be set for user, group, and other.
Since you can't execute a file that doesn't have EXECUTE
permission, fs-dos.so has an option
(exe=exec_mode) that lets you specify
how to handle the POSIX EXECUTE bit for executables.
- File ownership
- Although the DOS file structure doesn't support user IDs and
group IDs, fs-dos.so (by default) doesn't return an
error code if an attempt is made to change them.
An error isn't returned because a number of utilities attempt to do
this and failure would result in unexpected errors.
The approach taken is you can change anything to anything
since it isn't written to disk anyway.
The posix= options let you set stricter POSIX
checks and enable POSIX emulation.
For example, in POSIX mode, an error of EINVAL is flagged for
attempts to do any of the following:
- Set the user ID or group ID to something other than the
default (root).
- Remove an r (read) permission.
- Set an s (set ID on execution) permission.
If you set the posix option to emulate (the default)
or strict, you get the following benefits:
- The . and .. directory entries are
created in the root directory.
- The directory size is calculated.
- The number of links in a directory is calculated, based on its subdirectories.