pathname: root-nameopt root-directoryopt relative-path
root-name: operating system dependent sequences of characters implementation-defined sequences of characters
root-directory: directory-separator
relative-path: filename filename directory-separator relative-path an empty path
filename: non-empty sequence of characters other than directory-separator characters
directory-separator: preferred-separator directory-separatoropt fallback-separator directory-separatoropt
preferred-separator: operating system dependent directory separator character
fallback-separator: /, if preferred-separator is not /
[ Note:
Operating systems often place restrictions
on the characters that may be used in a filename.
For wide portability, users may wish to limit filename
characters to the POSIX Portable Filename Character Set:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -
— end note ]
Except in a root-name, multiple successive directory-separator characters are considered to be the same as one directory-separator character.
The filename dot ([fs.def.filename]) is treated as a reference to the current directory. The filename dot-dot ([fs.def.filename]) is treated as a reference to the parent directory. What the filename dot-dot refers to relative to root-directory is implementation-defined. Specific filenames may have special meanings for a particular operating system.
A root-name identifies the starting location for pathname resolution ([fs.def.pathres]). If there are no operating system dependent root-names, at least one implementation-defined root-name is required. [ Note: Many operating systems define a name beginning with two directory-separator characters as a root-name that identifies network or other resource locations. Some operating systems define a single letter followed by a colon as a drive specifier – a root-name identifying a specific device such as a disk drive. — end note ]
If a root-name is otherwise ambiguous, the possibility with the longest sequence of characters is chosen. [ Note: On a POSIX-like operating system, it is impossible to have a root-name and a relative-path without an intervening root-directory element. — end note ]