1
0
Fork 0
cl-sites/novaspec.org/cl/19_3_Logical_Pathnames.html
2025-02-05 18:52:26 +01:00

617 lines
No EOL
16 KiB
HTML

<!DOCTYPE HTML>
<HTML LANG="en-us"
><HEAD
><TITLE
>19.3 Logical Pathnames | Common Lisp Nova Spec</TITLE
><META CHARSET="US-ASCII"
><LINK REL="canonical" HREF="19_3_Logical_Pathnames.html"
><LINK REL="next" HREF="19_4_Filenames_Dictionary.html" TYPE="text/html" TITLE="19.4 Filenames Dictionary"
><LINK REL="prev" HREF="19_2_Pathnames.html" TYPE="text/html" TITLE="19.2 Pathnames"
><LINK REL="up" HREF="19_Filenames.html" TYPE="text/html" TITLE="19. Filenames"
><LINK REL="start" HREF="index.html" TYPE="text/html" TITLE="Common Lisp Nova Spec"
><META NAME="VIEWPORT" CONTENT="width=device-width, initial-scale=1.0"
><LINK REL="STYLESHEET" HREF="dpans.css%3F3909942064.css"
><SCRIPT SRC="dpans.js%3F3909942064"
></SCRIPT
><SCRIPT SRC="apropos.js%3F3909942064"
></SCRIPT
></HEAD
><BODY
><DIV
><DIV CLASS="topnav"
><DIV CLASS="breadcrumb"
><SPAN CLASS="breadcrumb-item"
><A HREF="index.html"
>Common Lisp Nova Spec</A
></SPAN
> <SPAN CLASS="breadcrumb-item"
>&#8594; <A HREF="19_Filenames.html"
>19. Filenames</A
></SPAN
> <SPAN CLASS="breadcrumb-item"
>&#8594; <A HREF="19_3_Logical_Pathnames.html"
>19.3 Logical Pathnames</A
></SPAN
></DIV
><DIV CLASS="apropos"
><DIV CLASS="apropos-io"
><A HREF="19_2_Pathnames.html" CLASS="prev"
>&#8592;</A
><SPAN ID="apropos-label"
>Apropos </SPAN
><INPUT ID="apropos" AUTOFOCUS="AUTOFOCUS" PLACEHOLDER="Type here to search" ONINPUT="aproposInput(this);" ONKEYUP="aproposKeyup(event);" ONCHANGE="aproposChange(this);" ONFOCUS="aproposFocus(this);" ONFOCUSOUT="aproposFocusout(this);"
><A HREF="19_4_Filenames_Dictionary.html" CLASS="next"
>&#8594;</A
></DIV
><DIV ID="apropos-res"
></DIV
></DIV
></DIV
><DIV CLASS="matter"
><SECTION
><H2 ID="sec_19_3" CLASS="HeadII"
>19.3 Logical Pathnames</H2
><UL CLASS="subtoc"
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1"
>19.3.1 Syntax of Logical Pathname Namestrings</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1"
>19.3.1.1 Additional Information about Parsing Logical Pathname Namestrings</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_1"
>19.3.1.1.1 The Host part of a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_2"
>19.3.1.1.2 The Device part of a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_3"
>19.3.1.1.3 The Directory part of a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_4"
>19.3.1.1.4 The Type part of a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_5"
>19.3.1.1.5 The Version part of a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_6"
>19.3.1.1.6 Wildcard Words in a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_7"
>19.3.1.1.7 Lowercase Letters in a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_1_1_8"
>19.3.1.1.8 Other Syntax in a Logical Pathname Namestring</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_2"
>19.3.2 Logical Pathname Components</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_2_1"
>19.3.2.1 Unspecific Components of a Logical Pathname</A
></LI
><LI
><A HREF="19_3_Logical_Pathnames.html#sec_19_3_2_2"
>19.3.2.2 Null Strings as Components of a Logical Pathname</A
></LI
></UL
><H3 ID="sec_19_3_1" CLASS="HeadIII"
>19.3.1 Syntax of Logical Pathname Namestrings</H3
><P CLASS="j"
>The syntax of a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> <A HREF="26_1_Glossary.html#namestring"
><EM CLASS="term"
>namestring</EM
></A
> is as follows. (Note that unlike many notational descriptions in this document, this is a syntactic description of character sequences, not a structural description of <A HREF="26_1_Glossary.html#object"
><EM CLASS="term"
>objects</EM
></A
>.)</P
><TABLE CELLSPACING="0" CELLPADDING="0" RULES="GROUPS" STYLE="margin: 1ex 0"
><TBODY
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
><VAR CLASS="param"
>logical-pathname</VAR
><SPAN CLASS="cmssi"
>::</SPAN
>=</TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> [&#8595;<VAR CLASS="param"
>host</VAR
> <VAR CLASS="param"
>host-marker</VAR
>]</TD
></TR
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> [&#8595;<VAR CLASS="param"
><VAR CLASS="param"
>relative-directory-marker</VAR
></VAR
>] {&#8595;<VAR CLASS="param"
>directory</VAR
> <VAR CLASS="param"
>directory-marker</VAR
>}*</TD
></TR
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> [&#8595;<VAR CLASS="param"
>name</VAR
>] [<VAR CLASS="param"
>type-marker</VAR
> &#8595;<VAR CLASS="param"
>type</VAR
> [<VAR CLASS="param"
>version-marker</VAR
> &#8595;<VAR CLASS="param"
>version</VAR
>]]</TD
></TR
></TBODY
></TABLE
><TABLE CELLSPACING="0" CELLPADDING="0" RULES="GROUPS" STYLE="margin: 1ex 0"
><TBODY
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
><VAR CLASS="param"
>host</VAR
><SPAN CLASS="cmssi"
>::</SPAN
>=</TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> &#8595;<VAR CLASS="param"
>word</VAR
></TD
></TR
></TBODY
></TABLE
><TABLE CELLSPACING="0" CELLPADDING="0" RULES="GROUPS" STYLE="margin: 1ex 0"
><TBODY
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
><VAR CLASS="param"
>directory</VAR
><SPAN CLASS="cmssi"
>::</SPAN
>=</TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> &#8595;<VAR CLASS="param"
>word</VAR
> | &#8595;<VAR CLASS="param"
>wildcard-word</VAR
> | &#8595;<VAR CLASS="param"
>wild-inferiors-word</VAR
></TD
></TR
></TBODY
></TABLE
><TABLE CELLSPACING="0" CELLPADDING="0" RULES="GROUPS" STYLE="margin: 1ex 0"
><TBODY
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
><VAR CLASS="param"
>name</VAR
><SPAN CLASS="cmssi"
>::</SPAN
>=</TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> &#8595;<VAR CLASS="param"
>word</VAR
> | &#8595;<VAR CLASS="param"
>wildcard-word</VAR
></TD
></TR
></TBODY
></TABLE
><TABLE CELLSPACING="0" CELLPADDING="0" RULES="GROUPS" STYLE="margin: 1ex 0"
><TBODY
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
><VAR CLASS="param"
>type</VAR
><SPAN CLASS="cmssi"
>::</SPAN
>=</TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> &#8595;<VAR CLASS="param"
>word</VAR
> | &#8595;<VAR CLASS="param"
>wildcard-word</VAR
></TD
></TR
></TBODY
></TABLE
><TABLE CELLSPACING="0" CELLPADDING="0" RULES="GROUPS" STYLE="margin: 1ex 0"
><TBODY
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE=";padding-right:3px"
></TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;padding-right:3px"
><VAR CLASS="param"
>version</VAR
><SPAN CLASS="cmssi"
>::</SPAN
>=</TD
><TD ALIGN="LEFT" VALIGN="BASELINE" STYLE="padding-left:3px;"
> &#8595;<VAR CLASS="param"
>pos-int</VAR
> | <VAR CLASS="param"
>newest-word</VAR
> | <VAR CLASS="param"
>wildcard-version</VAR
></TD
></TR
></TBODY
></TABLE
><P CLASS="j"
><VAR CLASS="param"
>host-marker</VAR
> &#8212; a <A HREF="26_1_Glossary.html#colon"
><EM CLASS="term"
>colon</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>relative-directory-marker</VAR
> &#8212; a <A HREF="26_1_Glossary.html#semicolon"
><EM CLASS="term"
>semicolon</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>directory-marker</VAR
> &#8212; a <A HREF="26_1_Glossary.html#semicolon"
><EM CLASS="term"
>semicolon</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>type-marker</VAR
> &#8212; a <A HREF="26_1_Glossary.html#dot"
><EM CLASS="term"
>dot</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>version-marker</VAR
> &#8212; a <A HREF="26_1_Glossary.html#dot"
><EM CLASS="term"
>dot</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>wild-inferiors-word</VAR
> &#8212; The two character sequence &#8220;<CODE CLASS="f"
>**</CODE
>&#8221; (two <A HREF="26_1_Glossary.html#asterisk"
><EM CLASS="term"
>asterisks</EM
></A
>). </P
><P CLASS="j"
><VAR CLASS="param"
>newest-word</VAR
> &#8212; The six character sequence &#8220;<CODE CLASS="f"
>newest</CODE
>&#8221; or the six character sequence &#8220;<CODE CLASS="f"
>NEWEST</CODE
>&#8221;. </P
><P CLASS="j"
><VAR CLASS="param"
>wildcard-version</VAR
> &#8212; an <A HREF="26_1_Glossary.html#asterisk"
><EM CLASS="term"
>asterisk</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>wildcard-word</VAR
> &#8212; one or more <A HREF="26_1_Glossary.html#asterisk"
><EM CLASS="term"
>asterisks</EM
></A
>, uppercase letters, digits, and hyphens, including at least one <A HREF="26_1_Glossary.html#asterisk"
><EM CLASS="term"
>asterisk</EM
></A
>, with no two <A HREF="26_1_Glossary.html#asterisk"
><EM CLASS="term"
>asterisks</EM
></A
> adjacent. </P
><P CLASS="j"
><VAR CLASS="param"
>word</VAR
> &#8212; one or more uppercase letters, digits, and hyphens. </P
><P CLASS="j"
><VAR CLASS="param"
>pos-int</VAR
> &#8212; a positive <A HREF="26_1_Glossary.html#integer"
><EM CLASS="term"
>integer</EM
></A
>.</P
><H4 ID="sec_19_3_1_1" CLASS="HeadIV"
>19.3.1.1 Additional Information about Parsing Logical Pathname Namestrings</H4
><H5 ID="sec_19_3_1_1_1" CLASS="HeadV"
>19.3.1.1.1 The Host part of a Logical Pathname Namestring</H5
><P CLASS="j"
>The <VAR CLASS="param"
>host</VAR
> must have been defined as a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> host; this can be done by using <A HREF="f_setf.html" CLASS="macref"
><B
>setf</B
></A
> of <A HREF="f_logical-pathname-translations.html" CLASS="funref"
><B
>logical-pathname-translations</B
></A
>. </P
><P CLASS="j"
>The <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> host name <CODE CLASS="f"
>"SYS"</CODE
> is reserved for the implementation. The existence and meaning of <CODE CLASS="f"
>SYS:</CODE
> <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathnames</EM
></A
> is <A HREF="26_1_Glossary.html#implementation-defined"
><EM CLASS="term"
>implementation-defined</EM
></A
>.</P
><H5 ID="sec_19_3_1_1_2" CLASS="HeadV"
>19.3.1.1.2 The Device part of a Logical Pathname Namestring</H5
><P CLASS="j"
>There is no syntax for a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> device since the device component of a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> is always <SPAN CLASS="kwd"
><SPAN CLASS="cmtt"
>:unspecific</SPAN
></SPAN
>; see <A HREF="19_3_Logical_Pathnames.html#sec_19_3_2_1" CLASS="secref"
><SPAN CLASS="cmr"
>Section</SPAN
> <SPAN CLASS="cmr"
>19.3.2.1</SPAN
> <SPAN CLASS="cmr"
>(Unspecific</SPAN
> <SPAN CLASS="cmr"
>Components</SPAN
> <SPAN CLASS="cmr"
>of</SPAN
> <SPAN CLASS="cmr"
>a</SPAN
> <SPAN CLASS="cmr"
>Logical</SPAN
> <SPAN CLASS="cmr"
>Pathname)</SPAN
></A
>.</P
><H5 ID="sec_19_3_1_1_3" CLASS="HeadV"
>19.3.1.1.3 The Directory part of a Logical Pathname Namestring</H5
><P CLASS="j"
>If a <VAR CLASS="param"
>relative-directory-marker</VAR
> precedes the <VAR CLASS="param"
>directories</VAR
>, the directory component parsed is as <A HREF="26_1_Glossary.html#relative"
><EM CLASS="term"
>relative</EM
></A
>; otherwise, the directory component is parsed as <A HREF="26_1_Glossary.html#absolute"
><EM CLASS="term"
>absolute</EM
></A
>. </P
><P CLASS="j"
>If a <VAR CLASS="param"
>wild-inferiors-marker</VAR
> is specified, it parses into <SPAN CLASS="kwd"
><SPAN CLASS="cmtt"
>:wild-inferiors</SPAN
></SPAN
>.</P
><H5 ID="sec_19_3_1_1_4" CLASS="HeadV"
>19.3.1.1.4 The Type part of a Logical Pathname Namestring</H5
><P CLASS="j"
>The <VAR CLASS="param"
>type</VAR
> of a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> for a <A HREF="26_1_Glossary.html#source_file"
><EM CLASS="term"
>source file</EM
></A
> is <CODE CLASS="f"
>"LISP"</CODE
>. This should be translated into whatever type is appropriate in a physical pathname.</P
><H5 ID="sec_19_3_1_1_5" CLASS="HeadV"
>19.3.1.1.5 The Version part of a Logical Pathname Namestring</H5
><P CLASS="j"
>Some <A HREF="26_1_Glossary.html#file_system"
><EM CLASS="term"
>file systems</EM
></A
> do not have <VAR CLASS="param"
>versions</VAR
>. <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>Logical pathname</EM
></A
> translation to such a <A HREF="26_1_Glossary.html#file_system"
><EM CLASS="term"
>file system</EM
></A
> ignores the <VAR CLASS="param"
>version</VAR
>. This implies that a program cannot rely on being able to store more than one version of a file named by a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
>. </P
><P CLASS="j"
>If a <VAR CLASS="param"
>wildcard-version</VAR
> is specified, it parses into <SPAN CLASS="kwd"
><SPAN CLASS="cmtt"
>:wild</SPAN
></SPAN
>.</P
><H5 ID="sec_19_3_1_1_6" CLASS="HeadV"
>19.3.1.1.6 Wildcard Words in a Logical Pathname Namestring</H5
><P CLASS="j"
>Each <A HREF="26_1_Glossary.html#asterisk"
><EM CLASS="term"
>asterisk</EM
></A
> in a <VAR CLASS="param"
>wildcard-word</VAR
> matches a sequence of zero or more characters. The <VAR CLASS="param"
>wildcard-word</VAR
> &#8220;<CODE CLASS="f"
>*</CODE
>&#8221; parses into <SPAN CLASS="kwd"
><SPAN CLASS="cmtt"
>:wild</SPAN
></SPAN
>; other <EM CLASS="term"
>wildcard-words</EM
> parse into <A HREF="26_1_Glossary.html#string"
><EM CLASS="term"
>strings</EM
></A
>.</P
><H5 ID="sec_19_3_1_1_7" CLASS="HeadV"
>19.3.1.1.7 Lowercase Letters in a Logical Pathname Namestring</H5
><P CLASS="j"
>When parsing <VAR CLASS="param"
>words</VAR
> and <VAR CLASS="param"
>wildcard-words</VAR
>, lowercase letters are translated to uppercase.</P
><H5 ID="sec_19_3_1_1_8" CLASS="HeadV"
>19.3.1.1.8 Other Syntax in a Logical Pathname Namestring</H5
><P CLASS="j"
>The consequences of using characters other than those specified here in a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> <A HREF="26_1_Glossary.html#namestring"
><EM CLASS="term"
>namestring</EM
></A
> are unspecified. </P
><P CLASS="j"
>The consequences of using any value not specified here as a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> component are unspecified.</P
><H3 ID="sec_19_3_2" CLASS="HeadIII"
>19.3.2 Logical Pathname Components</H3
><H4 ID="sec_19_3_2_1" CLASS="HeadIV"
>19.3.2.1 Unspecific Components of a Logical Pathname</H4
><P CLASS="j"
>The device component of a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> is always <SPAN CLASS="kwd"
><SPAN CLASS="cmtt"
>:unspecific</SPAN
></SPAN
>; no other component of a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
> can be <SPAN CLASS="kwd"
><SPAN CLASS="cmtt"
>:unspecific</SPAN
></SPAN
>.</P
><H4 ID="sec_19_3_2_2" CLASS="HeadIV"
>19.3.2.2 Null Strings as Components of a Logical Pathname</H4
><P CLASS="j"
>The null string, <CODE CLASS="f"
>""</CODE
>, is not a valid value for any component of a <A HREF="26_1_Glossary.html#logical_pathname"
><EM CLASS="term"
>logical pathname</EM
></A
>.</P
></SECTION
></DIV
><DIV CLASS="footer"
><DIV CLASS="btmnav"
><A HREF="19_2_Pathnames.html" CLASS="prev"
>&#8592;</A
><A HREF="19_4_Filenames_Dictionary.html" CLASS="next"
>&#8594;</A
></DIV
><DIV CLASS="trail"
>Conversion to HTML copyright 2023 by Gilbert Baumann</DIV
></DIV
></DIV
><SCRIPT
>domReady();</SCRIPT
></BODY
></HTML
>