HP OpenVMS Systems Documentation |
OpenVMS 用户手册
11.10 建立逻辑名表
CREATE/NAME_TABLE
命令建立一个逻辑名表,并把它编目到一个目录逻辑名表中。标识逻辑名表或者迭代翻译成逻辑名表的逻辑名必须总是进入到一个目录逻辑名表。 要建立一个进程专用的逻辑名表,把这个表建立在 LNM$PROCESS_DIRECTORY 中 (默认)。 目录表中的名称可以包含 1 至 31 个字符。只有大写字母数字字符、美元符 ($) 和下划线 (_) 是有效的。如果指定小写字母的表名,它将自动转换为大写字母。 以下例子建立一个进程专用的逻辑名表 TAX,把逻辑名 CREDIT 的定义放入这个表,并验证该表的建立。SHOW LOGICAL/TABLE 命令允许指定逻辑名表显示出来。
要使系统在文件查寻时自动搜索新表,可以重新定义 LNM$PROCESS,如以下例子所示:
11.10.2 建立可共享的逻辑名表要建立一个可共享的逻辑名表,使用 /PARENT_TABLE 限定词并指定可共享的表名。例如:
11.10.3 建立簇范围逻辑名表用建立其他可共享逻辑名表的同样方法,可以建立一个簇范围逻辑名表。簇范围逻辑名表是一类特殊的可共享逻辑名表,并服从应用于所有可共享逻辑名表的特权和存取需求 (请参阅 11.10.4 节)。 以下例子展示如何建立一个簇范围逻辑名表:
要建立将驻留在新的簇范围逻辑名表中的簇范围逻辑名,使用 DEFINE 命令定义新的簇范围逻辑名,并用 /TABLE 限定词指定这个新表的名称,如以下例子所示:
11.10.4 特权和存取需求特权用户可以建立特殊用途的可共享逻辑名表。例如,一个应用程序可以建立一个或多个可共享的逻辑名表传达信息 (如文件位置) 给应用程序的用户:
要建立一个可共享的逻辑名表,必须具有:
要删除一个可共享逻辑名表,必须具有:
11.10.5 修改默认保护操作系统为它建立的和用户建立的可共享逻辑名表提供默认保护。默认保护存储在系统管理员或表拥有者可以修改的安全简要中。有关详情,请参阅 OpenVMS Guide to System Security。 您可以修改您建立的表的默认保护:
可共享逻辑名表的 ACL 在系统引导之间不保存。每次系统引导时,必须重新建立这些逻辑名表的 ACL。
有关对可共享逻辑名表应用 ACL 保护的详情,请参阅
OpenVMS DCL Dictionary 的 SET SECURITY/ACL 命令。
定额用来限制一个给定逻辑名表可以消耗的系统资源数量。进程、组和系统逻辑名表有无限定额。按照默认,当建立一个逻辑名表时,它也有一个无限定额。 您可以指定一个定额限制您建立的逻辑名表的大小,以字节为单位。在建立一个逻辑名之前,要根据这个表的剩余定额检查其数据结构的大小。如果没有足够定额用于新条目,那么系统显示一条出错消息。 一旦为一个表设置了定额,就不能更改它。如果这个表的空间用完了,就使用 DEASSIGN 命令删除旧的逻辑名。这将为新逻辑名释放空间。 在以下例子中,建立逻辑名表 ABC,并给出 500 字节的定额:
11.10.6.1 设置作业表定额作业逻辑名表是一个可共享表。建立该表时,就确定这个作业逻辑名表的定额。其定额由以下一个或多个准则确定:
作业逻辑名表定额值为 0,意味着没有定额。为了实用,这个定额是无限的。 LNM$FILE_DEV 定义将要搜索的逻辑名表和所有逻辑名翻译的搜索次序。一般,不需要修改默认搜索次序。然而,您可能想要添加新的、进程专用的逻辑名表的名称,使之在用 LNM$FILE_DEV 指定的表之前首先搜索。同样,系统管理员可能想要添加一个或多个可共享逻辑名表的名称,使之在用 LNM$FILE_DEV 指定的表之前首先搜索。 要用一个逻辑名新表建立 LNM$FILE_DEV 进程专用定义,使之首先被系统搜索,执行以下步骤:
在以下例子中,建立一个新逻辑名表 NEWTAB,然后使用 NEWTAB 建立 LNM$FILE_DEV 进程专用定义,并将其列为搜索的第一个表:
在上面这个例子中,基于以下原因,系统首先搜索 NEWTAB:
要把一个新逻辑名表添加到 LNM$FILE_DEV 系统定义中,必须有 SYSNAM 或 SYSPRV 特权。 以下例子类似上一个,只是 NEWTAB 被建立为一个可共享表,而不是一个进程专用表:
您也可以从 LNM$FILE_DEV 定义的搜索列表中除去逻辑名表。在以下例子中,建立 LNM$FILE_DEV 进程专用定义,并且只包含进程和系统逻辑名表。由于进程专用的定义不包含 LNM$JOB 和 LNM$GROUP, 因此需要翻译逻辑名的后续命令将不搜索作业或组表。
11.12 删除逻辑名表要删除一个逻辑名表,指定包含它的表 (系统或进程目录逻辑名表) 和表名。删除一个父逻辑名表时,将删除在后代表 (和后代表自己) 中的所有逻辑名。 要删除一个可共享逻辑名表,必须拥有对表的 DELETE 存取权或 SYSPRV 特权。 在以下例子中,这个命令删除逻辑名 WORKFILE:
在以下例子中,这个命令从进程目录表中删除逻辑名表 TAX:
11.13 与进程并存的逻辑名注册时,DCL 建立与进程并存的逻辑名。这些名称在进程的生存期保持定义。不能解除这些逻辑名的赋值。可以重新定义它们 (在 DEFINE 命令中指定一个不同的等价串),但是如果重新定义的名称以后被解除赋值,那么与进程并存的名称就会重新建立。 以下与进程并存的逻辑名是可提供的:
11.13.1 在交互和批处理中同等名的差别交互使用系统时,DCL 把 SYS$INPUT、SYS$OUTPUT、SYS$ERROR 和 SYS$COMMAND 等同于终端。然而,执行命令过程和提交批量作业时,DCL 为这些逻辑名建立新的等价串。 交互执行一个命令过程时,发生以下情况:
提交一个批量作业时,发生以下情况:
嵌套命令过程时 (即是说,当编写一个执行其他命令过程的命令过程时),SYS$INPUT 的等价串更改为指向当前正在执行的命令过程。然而,SYS$OUTPUT、SYS$ERROR 和 SYS$COMMAND 的等价串保持不变,除非明确地更改它们。 另外,当输入一个打开文件的命令时,DCL 就打开这个文件作为一个与进程并存的文件。例如,如果使用 OPEN 命令打开一个文件,那么这个文件就被打开为一个与进程并存的文件。文件保持打开,直到明确地关闭这个文件,或者直到注销。
与进程并存的文件存储在存储器的特殊区域。注意,如果保持很多文件同时打开,那么可以用尽这个区域。如果发生这种情况,就关闭一些文件 (或者注销)。 可以使用与进程并存的逻辑名重定向文件 I/O。在命令过程中,可以使用这些名称从终端读取数据,并且显示数据 (请参阅第 13 章和第 14 章)。注意 DCL 忽略 SYS$INPUT 和 SYS$COMMAND 的新定义。
在 OpenVMS V7.1 中,引入了 DCL PIPE 命令。PIPE
命令是重定向文件 I/O 的替代方法。有关 PIPE 命令的详情,请参阅 OpenVMS DCL Dictionary: N--Z。 您可以重新定义 SYS$INPUT,以便一个由命令过程调用的映象可以从终端或另一个文件读取输入。由于 DCL 总是从默认输入流获得输入,因此 DCL 忽略 SYS$INPUT 的重新定义。 在以下例子中,所列命令是新命令过程文件的一部分。DEFINE 命令把 SYS$INPUT 重新定义为 SYS$COMMAND。注册时,SYS$COMMAND 引用终端作为初始输入流。通过这个新定义,命令过程调用的映象从终端获得输入,而不是从命令过程文件 (默认),但是这只用于一段时间。 /USER_MODE 限定词告诉命令过程,只为下一个映象重新定义 SYS$INPUT。在这个例子中,下一个映象是编辑程序。当这个编辑程序完成时,SYS$INPUT 就恢复它的默认值。在这种情况下,其默认值是命令过程文件。
11.13.2.2 重定义 SYS$OUTPUT您可以重新定义 SYS$OUTPUT 把输出从默认设备重定向到另一个文件。当重新定义 SYS$OUTPUT 时,系统用这个逻辑名赋值指定的名称打开文件。当定义 SYS$OUTPUT 时,所有后续输出被指引到这个新文件。 记住要解除 SYS$OUTPUT 赋值。否则,输出将继续写入指定的文件。注意,可以按用户模式 (用 DEFINE/USER_MODE) 重新定义 SYS$OUTPUT 来重定向映象的输出。只有当执行下一个命令映象时,这个定义才是有效的。一旦执行完这个命令映象 (即,其输出被俘获到一个文件),逻辑名 SYS$OUTPUT 就恢复为它的默认值。 您注册时,系统建立两个称为 SYS$OUTPUT 的逻辑名。一个名称在执行模式建立;另一个名称在监督程序模式建立。通过重定义 SYS$OUTPUT 可以取代监督程序模式逻辑名。如果解除监督程序模式名赋值,那么系统在监督程序模式重新定义 SYS$OUTPUT,使用执行模式等价串。您不能解除执行模式名赋值。 重新定义 SYS$OUTPUT 为一个文件时,这个逻辑名只包含文件说明的设备部分,即使输出被指引到指定的文件。 重新定义 SYS$OUTPUT 时, 如果系统不能打开指定的文件,它就显示一条出错消息。 在重新定义 SYS$OUTPUT 之后,多数命令把输出指引到这个文件的现有版本。然而,某些命令在写入输出之前会建立这个文件的新版本。 在以下例子中,在输入 SHOW DEVICES 命令之前,SYS$OUTPUT 被定义为 MYFILE.LIS。SHOW DEVICES 产生的显示被指引到当前目录的 MYFILE.LIS,而不是终端。您可以象任何其他文本文件一样处理这个数据:
在以下例子中,SYS$OUTPUT 被重新定义为文件 TEMP.DAT。重新定义 SYS$OUTPUT 时,来自 DCL 和映象的输出被指引到文件 TEMP.DAT。 来自 SHOW LOGICAL 命令和 SHOW TIME 命令的输出也被发送到 TEMP.DAT。当 SYS$OUTPUT 被解除赋值时,系统关闭文件 TEMP.DAT 并把 SYS$OUTPUT 重新定义为终端。当输入 TYPE 命令时,收集在 TEMP.DAT 的输出显示在终端上。
重新定义 SYS$OUTPUT 时,其等价串包含设备名 DISK1,不是完整文件说明。 您可以重新定义 SYS$ERROR 把出错消息指引到一个指定的文件。然而,如果重新定义 SYS$ERROR,使它不同于 SYS$OUTPUT (或如果重新定义 SYS$OUTPUT 而没有重新定义 SYS$ERROR),那么 DCL 命令就把通知、警告、出错和严重出错消息发送给 SYS$ERROR 和 SYS$OUTPUT。因此,您接收这些消息两次,一次是在 SYS$ERROR 定义指出的文件中,另一次是在 SYS$OUTPUT 指出的文件中。成功消息只发送到 SYS$OUTPUT 指出的文件。
DCL 命令和映象使用标准出错显示机制,把出错消息发送给 SYS$ERROR 和 SYS$OUTPUT,即使
SYS$ERROR 不同于 SYS$OUTPUT。然而,如果重新定义
SYS$ERROR,然后运行一个引用 SYS$ERROR 的映象,那么这个映象只把出错消息发送给 SYS$ERROR 指出的文件。即使 SYS$ERROR 不同于 SYS$OUTPUT,也是如此。
虽然您可以重新定义 SYS$COMMAND,但 DCL 忽略您的定义。DCL 总是使用初始输入流的默认定义。然而,如果执行一个 SYS$COMMAND 引用的映象,那么这个映象可以使用您的新定义。
|