[an error occurred while processing this directive]

HP OpenVMS Systems Documentation

Content starts here

OpenVMS 用户手册


前页 目录 索引

11.3.7 为同一对象建立多个逻辑名

使用多个 DEFINE 命令,可以建立引用同一对象的多个逻辑名。例如,以下命令把逻辑名 $TERMINAL 和 CONSOLE 等同于一个终端的物理名,以便两个逻辑名转变为同一设备 (LTA69):


$ DEFINE $TERMINAL LTA69
$ DEFINE CONSOLE LTA69

11.4 删除逻辑名

要删除一个逻辑名,使用 DEASSIGN 命令。在进程和作业逻辑名表定义逻辑名时,直到进程终止或者用户有明确的删除动作,它们才被删除。然而,如果为 DEFINE 命令指定 /USER_MODE 限定词,那么逻辑名定义在进程逻辑名表中,并且在执行下一个命令映象之后自动删除。

要删除一个以冒号结束的逻辑名,指定两个冒号。类似 ASSIGN 命令,DEASSIGN 命令在搜索逻辑名表之前除去一个冒号。

11.5 逻辑名翻译

当系统读取 DCL 命令行中的文件说明或设备名时,它检查这个文件说明或设备名查看最左边的部分是否是逻辑名。如果最左边的部分以一个冒号、空格、逗号或行终止符 (例如,Enter)结束,那么系统尝试把它翻译为逻辑名。如果最左边的部分以任何其他字符结束,那么系统不尝试把它翻译为逻辑名。

在您输入了展示在以下例子中的命令后,系统查看 PUP 是否是一个逻辑名,因为 PUP 是文件说明的最左边部分。由于最左边的部分以 Enter 结束,因此系统尝试翻译 PUP。


$ TYPE PUP [Enter]

在您输入了展示在以下例子中的命令后,系统检查 DISK 是否是一个逻辑名。系统尝试翻译 DISK,因为它是最左边的部分并且以一个冒号结束。系统不检查 PUP:


$ TYPE DISK:PUP [Enter]

在第三个例子中,系统不设法翻译 [DRYSDALE]PUP,因为最左边的部分以一个右方括号 (]) 结束:


$ TYPE [DRYSDALE]PUP [Enter]

11.5.1 迭代翻译

逻辑名翻译可以迭代: 系统翻译了一个逻辑名之后,系统为它在第一个逻辑名定义中查找到的任何逻辑名重复翻译进程。

系统限制执行逻辑名翻译的嵌套级数。级数依系统设施变化,但至少 9 级。如果您定义的级数比系统确定的级数更多或者如果您建立了一个循环定义,那么使用这个逻辑名时就会出错。

在以下例子中,第一个 DEFINE 命令把逻辑名 DISK 等同于设备名 DUA1。第二个 DEFINE 命令把逻辑名 MEMO 等同于文件说明 DISK:[JEFF.MEMOS]COMPLAINT.TXT:


$ DEFINE DISK DUA1:
$ DEFINE MEMO DISK:[JEFF.MEMOS]COMPLAINT.TXT

系统翻译逻辑名 MEMO 时,它找到等价串 DISK:[JEFF.MEMOS]COMPLAINT.TXT。然后它查看这个文件说明最左边部分是否以一个冒号、空格、逗号或行终止符结束。它找到 DISK 之后的冒号。系统也翻译这个逻辑名。文件说明的最后翻译结果是:


DUA1:[JEFF.MEMOS]COMPLAINT.TXT

11.5.2 用系统默认值填充遗漏字段

系统翻译逻辑名时,它用当前默认设备、目录和版本号填充文件说明的任何遗漏字段。使用一个逻辑名为一个命令指定输入文件时,这个命令也使用这个逻辑名为输出文件分配一个文件说明。

如果等价串包含文件名和文件类型,那么也为输出文件给定同样的文件名和文件类型。如果等价串不包含文件类型,则提供一个默认文件类型。提供的文件类型依赖于使用的命令。

在一列输入文件中使用逻辑名时,每个逻辑名的等价串提供一个临时默认。

在以下例子中,因为没有为逻辑名 HIG 指定一个设备名,MAL 的设备名把 DBA1 定义为临时默认设备:


$ SET DEFAULT  DBA2:[CASEY]
$ DEFINE MAL DBA1:[MALCOLM]
$ DEFINE HIG [HIGGINS]
$ PRINT ALPHA,MAL:BETA,HIG:GAMMA

PRINT 命令寻找以下文件:

DBA2:[CASEY]ALPHA.LIS
DBA1:[MALCOLM]BETA.LIS
DBA1:[HIGGINS]GAMMA.LIS

11.5.3 逻辑名翻译的默认搜索次序

同样的逻辑名可以存在于一个以上逻辑名表。当系统翻译文件说明中的逻辑名时,它搜索一列逻辑名表,直到查找到一个匹配。系统使用找到的第一个匹配。

被搜索的逻辑名表的列表在逻辑名 LNM$FILE_DEV 的定义中指定。默认列表包括进程、作业、组、系统和簇范围系统的逻辑名表。搜索次序是一样的 (进程、作业、组、系统和簇范围系统)。

您可以修改搜索次序,见 11.11 节描述。

11.6 显示逻辑名

使用 SHOW LOGICAL 命令显示逻辑名和它们的等价串。

有时,逻辑名的定义包括另一个逻辑名。SHOW LOGICAL 命令执行迭代翻译。然后,它显示其等价串和翻译级。级号是基于 0 的;即,0 是第一级,1 是第二级,以此类推。要只显示找到的指定逻辑名的第一个翻译,使用 SHOW TRANSLATION 命令。(有关详情,请参阅 OpenVMS DCL Dictionary。)

如果使用 SHOW LOGICAL 命令确定与进程并存文件的等价串 (请参阅 11.13 节),那么这个命令只显示这个字符串的设备部分。例如:


$ SHOW LOGICAL SYS$INPUT
"SYS$INPUT" = "_TTB4:" (LNM$PROCESS_TABLE)

在以下例子中,显示逻辑名 MYDISK。执行两级翻译;数字 1 指出第二级翻译:


$ SHOW LOGICAL MYDISK
  "MYDISK" = "WORK4" (LNM$PROCESS_TABLE)
1 "WORK4" = "$255$DUA17:" (LNM$SYSTEM_TABLE)

在下一个例子中,显示逻辑名 WORKFILE 的等价串:


$ SHOW LOGICAL WORKFILE
"WORKFILE" = "DISK2:[WALSH.REPORTS]WORK_SUMMARY.DAT" (LNM$PROCESS_TABLE)

系统显示逻辑名、它的翻译和包含该逻辑名的表名。

11.6.1 指定搜索的逻辑名表

按照默认,SHOW LOGICAL 命令搜索您的进程、作业、组、系统和簇范围系统表,并且显示所有匹配。然而,使用 /TABLE 限定词可以指定特定的逻辑名表搜索次序。也可以使用 /GROUP、/SYSTEM、/JOB  和 /PROCESS 限定词来显示分别在组、系统、作业和进程逻辑名表中的逻辑名。

在以下例子中,SHOW LOGICAL 命令使用 /TABLE 限定词显示进程逻辑名表 (LNM$PROCESS) 中的逻辑名:


$ SHOW LOGICAL/TABLE=LNM$PROCESS
(LNM$PROCESS_TABLE)
  "DECW$DISPLAY" = "_WSA30:"
  "SYS$COMMAND" = "_FIFI$VTA65:"
  "SYS$DISK" [super] = "WORK1:"
  "SYS$DISK" [exec] = "WORK1:"
  "SYS$ERROR" = "_FIFI$VTA65:"
  "SYS$INPUT" = "_FIFI$VTA65:"
  "SYS$OUTPUT" [super] = "_FIFI$VTA65:"
  "SYS$OUTPUT" [exec] = "_FIFI$VTA65:"
  "TT" = "_VTA65:"

11.6.2 显示翻译属性和存取模式

要显示逻辑名的翻译属性和存取模式,使用 SHOW LOGICAL/FULL 命令,如下所示:


$ SHOW LOGICAL/FULL SYS$ERROR
  "SYS$ERROR" [exec] = "_PADRAIC$TDA824:" [terminal] (LNM$PROCESS_TABLE)

这个例子显示在执行模式下的逻辑名 SYS$ERROR,并且展示其翻译属性,即终端。

11.7 建立和使用搜索列表

在单个 DEFINE (或 ASSIGN) 命令中一个逻辑名等于几个等价串时,就建立了一个搜索列表。

当您在文件说明中使用搜索列表时,搜索列表的翻译如下所示:

  • 如果搜索列表只包含一个设备,那么搜索原始的默认目录。
  • 如果搜索列表包含一个设备和一个目录,则这两个都用来构成一个完整文件说明。

按照指定等价串的次序,系统翻译这个逻辑名,直到找到一个匹配。

这个命令只影响找到的第一个文件。到达这一点,搜索就结束。如果没有找到一个匹配,那么系统只在尝试查找最后一个文件时才报告出错。

注意,搜索列表不是一个通配符;它是一个查找位置的列表。

在以下例子中,逻辑名 GETTYSBURG 是一个搜索列表:


$ DEFINE GETTYSBURG [JONES.HISTORY],[JONES.WORKFILES]
$ SHOW LOGICAL GETTYSBURG

  "GETTYSBURG" = "[JONES.HISTORY]" (LNM$PROCESS_TABLE)
       = "[JONES.WORKFILES]"

在下一个例子中,TYPE 命令在搜索 [JONES.WORKFILES] 之前搜索等价串 [JONES.HISTORY] (在前面的逻辑名定义 GETTYSBURG 指定的次序):


$ TYPE GETTYSBURG:SPEECH.TXT
DISK1:[JONES.HISTORY]SPEECH.TXT;2

Fourscore and seven years ago, our fathers brought
forth on this continent a new nation, conceived
in liberty, and dedicated to the proposition that
all men are created equal.
   .
   .
   .

TYPE 命令一旦查找到文件 SPEECH.TXT,它就结束搜索并显示这个文件。

11.7.1 搜索列表和可以接受通配符的命令一起使用

您可以将搜索列表与一个可以接受通配符的命令一起使用。使用通配符时,系统使用搜索列表的每个等价串形成文件说明。这个命令在标识现有文件的每个文件说明上都操作。

在以下例子中,指定 DIRECTORY 命令在版本字段带通配符。它在 GETTYSBURG 定义的搜索列表中查找 SPEECH.TXT 的所有版本:


$ DIRECTORY GETTYSBURG:SPEECH.TXT;*

目录 DISK1:[JONES.HISTORY]

SPEECH.TXT;2     SPEECH.TXT;1

共 2 个文件。

目录 DISK1:[JONES.WORKFILES]

SPEECH.TXT;1

共 1 个文件。

总计 2 个目录,3 个文件。

输入搜索列表时 (例如,使用 DIRECTORY 命令),操作系统使用列表的一部分元素提供已从列表的其他部分省略的部分文件说明。如果文件说明不完整 (如在以下例子中的 SYS$LOGIN 所展示),命令行可以产生多个文件和文件未找到的条件:


$ DIRECTORY SYS$MANAGER:LOGIN.COM,SYS$LOGIN

把一个分号放在文件说明后面,可以避免产生多个文件和文件未找到的条件,如下所示:


$ DIRECTORY SYS$MANAGER:LOGIN.COM;,SYS$LOGIN

11.7.2 搜索列表和 SET DEFAULT 命令一起使用

把搜索列表指定为 SET DEFAULT 命令的第一个部分参数时,系统把未翻译的搜索列表名分配给 SYS$DISK。(SYS$DISK 是一个翻译为默认磁盘的逻辑名。) 注意,当把搜索列表指定为 SET DEFAULT 命令的第一个部分参数时,搜索列表的每个等价串必须包含一个设备名。

在以下例子中,指定一个设备和一个目录;因而,两个都用于构成文件说明:


$ DEFINE FIFI DISK1:[FRED],DISK2:[GLADYS],DISK3:[MEATBALL.SUB]
$ DIRECTORY FIFI:MEMO.LIS

这个命令显示以下的文件列表:


DISK1:[FRED]MEMO.LIS
DISK2:[GLADYS]MEMO.LIS
DISK3:[MEATBALL.SUB]MEMO.LIS

在以下例子中,SHOW DEFAULT 命令展示默认磁盘和目录为 DISK2:[MEATBALL.SUB]。下一步,定义搜索列表 FIFI。SET DEFAULT 命令使用这个搜索列表作为其参数。第二次使用 SHOW DEFAULT 命令展示默认目录没有被更改。然而,搜索列表 FIFI 与其等价串一起显示为默认设备。SHOW DEFAULT 命令按照系统在该搜索列表的求值次序显示搜索列表:


$ SHOW DEFAULT
  DISK2:[MEATBALL.SUB]
$ DEFINE FIFI DISK1:[FRED],DISK2:[GLADYS],DISK3:
$ SET DEFAULT FIFI
$ SHOW DEFAULT
  FIFI:[MEATBALL.SUB]
=   DISK1:[FRED]
=   DISK2:[GLADYS]
=   DISK3:[MEATBALL.SUB]

11.7.3 搜索列表和 RUN 命令一起使用

当 RUN 命令后面跟随一个搜索列表时,系统象以前描述一样形成文件说明。然而,系统于是要查看在列表中的任何文件是否是已安装的映象。系统运行搜索列表中第一个已安装的映象文件。然后,RUN 命令终止。

如果没有文件说明是已安装的映象,那么系统重复形成文件说明的进程。这次它寻找磁盘上的每个文件说明。它运行在那里查找到的第一个文件。如果在已知文件列表或在磁盘上都没有找到指定的文件,则显示一条出错消息。

11.7.4 多个搜索列表的搜索次序

文件说明可以包含一个以上搜索列表。发生这种情况时,就使用文件名搜索列表的每个项目,同时第一个设备名保持不变。在文件名搜索列表的所有项目与第一个设备名结合之后,它们与第二个设备名结合。这个进程继续,直到搜索过每个设备。

您也可以有迭代 (嵌套) 搜索列表,此时搜索列表的一个名称翻译到另一个搜索列表。如果发生这种情况,系统使用子列表中的每个名称然后继续下一个上级名称。

以下例子展示一个文件说明,它在文件名和设备名中有一个搜索列表:


$ DEFINE FILE CHAP1.RNO, CHAP2.RNO
$ DEFINE DISK WORK1:[ROSE], WORK2:[THORN]
$ SET DEFAULT DISK
$ DIRECTORY FILE

目录 WORK1:[ROSE]

CHAP1.RNO;2          CHAP2.RNO;1

共 2 个文件。

目录 WORK2:[THORN]

CHAP1.RNO;1          CHAP2.RNO;1

共 2 个文件。

总计 2 个目录,4 个文件。

展示列出其中每个文件名的目录,第一个目录是 WORK1:[ROSE] 而第二个目录是 WORK2:[THORN]。

以下例子展示迭代的搜索列表:


$ DEFINE NESTED FRED.DAT, NEW_LIST, RICKY.DAT
$ DEFINE NEW_LIST ETHEL.DAT, LUCY.DAT

这个搜索列表的搜索次序嵌套如下:

FRED.DAT
ETHEL.DAT
LUCY.DAT
RICKY.DAT

11.8 逻辑名表特征

逻辑名表有以下特征:

  • 作用域 (它是否是可共享的或进程专用的)
  • 存取模式
  • 名称
  • 父逻辑名表
  • 存取控制 (只用于可共享的逻辑名表)
  • 定额 (其逻辑名占据池的数量极限)

在系统初始化期间,建立几个可共享的逻辑名表。建立新进程时,系统为进程建立几个其他可共享的和进程专用的表。所有这些表展示在表 11-1 中。

逻辑名表建立时,可以指定它的存取模式。如果不指定,其模式默认为请求建立表时的存取模式,这通常是监督程序或用户模式。逻辑名表包含的逻辑名可以有它自己的存取模式或较少特权的存取模式。一个逻辑名表可以是另一个表的父表,而这个子表带同样或较少特权的存取模式。

一个逻辑名表通过它的名称标识,而这个名称本身也可以是一个逻辑名。作为逻辑名,每个逻辑名表名必须包含在一个逻辑名表内。

11.8.1 逻辑名表目录

两个称为目录的特殊逻辑名表以逻辑名表名称的容器形式存在:

  • 进程目录,LNM$PROCESS_DIRECTORY
    进程目录包含该进程的所有进程专用表的名称和它自己的表名。每个进程有它自己的进程专用目录。
  • 系统目录,LNM$SYSTEM_DIRECTORY
    系统目录包含所有可共享表的名称和它自己的表名。每个系统只有一个 LNM$SYSTEM_DIRECTORY。

这些目录包含迭代翻译成表名的名称。所有逻辑名表名和任何翻译成表的逻辑名保持在这些目录中。

逻辑名表的父表不一定是目录表。即是说,这个分层式结构与逻辑名表名称的位置不同。

11.8.2 显示目录表的结构

要显示逻辑名目录表与逻辑名表的关系,输入 SHOW LOGICAL/STRUCTURE 命令,如以下例子所示:


$ SHOW LOGICAL/STRUCTURE
(LNM$PROCESS_DIRECTORY)
    (LNM$PROCESS_TABLE)
(LNM$SYSTEM_DIRECTORY)
    (LNM$SYSTEM_TABLE)
    (LMF$LICENSE_TABLE)
    (LNM$CLUSTER_TABLE)
        (LNM$SYSCLUSTER_TABLE)
    (LNM$GROUP_000123)
    (LNM$JOB_824E98E0)
            .
            .
            .

这个例子展示逻辑名表名驻留在每个逻辑名表目录中。它也展示 LNM$CLUSTER_TABLE 和 LNM$SYSCLUSTER_TABLE 之间的关系。

11.9 默认逻辑名表

由执行者建立的默认表包括系统目录和进程目录表,它们展示在表 11-1 中。

表 11-1 默认逻辑名表
表名 完整表名 逻辑名 描述
进程逻辑名表
进程目录 LNM$PROCESS_DIRECTORY (没有其他逻辑名) 包含进程专用的逻辑名表名和迭代翻译成表名的名称的定义。
进程表 LNM$PROCESS_TABLE LNM$PROCESS 包含进程专用的逻辑名,例如 SYS$DISK 和 SYS$INPUT。
可共享的逻辑名表
系统目录 LNM$SYSTEM_DIRECTORY (没有其他逻辑名) 包含可共享的逻辑名表名和迭代翻译成表名的名称的定义。
系统表 LNM$SYSTEM_TABLE LNM$SYSTEM 包含在系统中所有进程共享的名称,例如,SYS$LIBRARY 和 SYS$SYSTEM。
簇范围系统表 LNM$SYSCLUSTER_TABLE LNM$SYSCLUSTER 包含在 OpenVMS 簇系统中所有进程共享的名称。
簇范围父表 LNM$CLUSTER_TABLE LNM$CLUSTER 所有簇范围逻辑名表的父表,包括 LNM$SYSCLUSTER_TABLE。
组表 LNM$GROUP_ gggggg 1 LNM$GROUP 包含在 UIC 组中所有进程共享的名称。
作业表 LNM$JOB_ xxxxxxxx 2 LNM$JOB 包含在作业树中所有进程共享的名称,例如,SYS$LOGIN 和 SYS$SCRATCH。

1字符串 gggggg 表示一个 6 位数字的八进制数,它包含进程的 UIC 组号。
2字符串 xxxxxxxx 表示一个 8 位数字的十六进制数,它是作业信息块的地址。


 

前页 后页 目录 索引