第二十九章 Caché 命令大全 USE 命令
将设备建立为当前设备。
重点
- 设备所有权是通过
OPEN
命令建立的。唯一的例外是主设备,它被分配给进程,通常是登录的终端。如果use命令中指定的设备不属于该进程,则Ccaché会发出<NOTOPEN>
错误消息。
大纲
USE:pc useargument,...
U:pc useargument,...
其中ueargument可以是:
device:(parameters):"mnespace"
参数
- pc 可选 - 后置表达式
- device 要选择为当前设备的设备,由设备ID或设备别名指定。设备ID可以是整数(设备号)、设备名称或顺序文件的路径名。如果是字符串,则必须用引号引起来。
- parameters 可选-用于设置设备特性的参数列表。参数列表括在括号中,列表中的参数用冒号分隔。参数可以是位置参数(在参数列表中按固定顺序指定)或关键字(按任意顺序指定)。允许混合使用位置参数和关键字参数。各个参数及其位置和关键字高度依赖于设备。
- mnespace 可选-包含要与此设备一起使用的控件助记符的助记符空间的名称,指定为引号字符串。
描述
使用设备将指定的设备建立为当前设备。该进程必须已经使用OPEN
命令建立了对设备的所有权。
在发出另一个USE
命令以选择另一个拥有的设备作为当前设备或该过程终止之前,当前设备将一直保持为当前设备。
Use
命令可以将诸如终端设备、磁带设备、假脱机设备、TCP绑定、进程间管道、命名管道和JOB
间通信等设备建立为当前设备。USE
命令也可用于打开顺序文件。设备参数将文件路径名指定为带引号的字符串。
USE
命令提供的参数高度依赖于设备。在许多情况下,可用的参数与OPEN
命令提供的参数相同;但是,某些设备参数只能使用OPEN
命令设置,而其他设备参数只能使用USE
命令设置。
USE
命令可以指定多个用逗号分隔的useargument。但是,一次只能有一个当前设备。如果您指定多个使用参数,则最后一个使用参数中指定的设备将成为当前设备。这种USE
形式可用于为多个设备设置参数,然后将最后命名的设备建立为当前设备。
参数
pc
可选的后置条件表达式。如果后置条件表达式为true(计算为非零数值),则Caché执行命令。如果后置条件表达式为假(计算为零),则Caché不执行命令。
device
要选择为当前设备的设备。指定与在相应的OPEN
命令中指定的设备ID(或其他设备标识符)相同的设备ID。
parameters
参数列表,用于设置要用作当前设备的设备的工作特性。如果有多个参数,则需要使用括号。(指定参数时始终使用括号是很好的编程实践。)请注意左括号前所需的冒号。在括号内,冒号用于分隔多个参数。
可以使用位置参数或关键字参数指定设备的参数。还可以在同一参数列表中混合使用位置参数和关键字参数。
在大多数情况下,指定相互矛盾、重复或无效的参数值不会导致错误。只要有可能,Caché就会忽略不适当的参数值,并采用适当的默认值。
在许多情况下,可用的参数与OPEN
命令支持的参数相同。对于顺序文件、TCP设备和进程间通信管道,某些参数只能使用OPEN
命令设置;对于顺序文件,某些参数只能使用USE命令设置。USE
参数特定于所选择的设备类型和特定的实现。
如果未指定USE
参数列表,则Caché将使用设备的默认OPEN
参数。设备的默认参数是可配置的。转到管理门户,选择“系统”,“配置”,“设备设置”,“设备”以显示当前设备列表。
对于所需的设备,单击“编辑”以显示其“打开参数:”选项。以与指定OPEN
命令参数(包括括号在内)相同的方式指定此值。例如, ("AVL":0:2048
)。
Positional Parameters
必须在参数列表中以固定顺序指定位置参数。可以省略位置参数(并接收默认值),但必须保留冒号以指示省略的位置参数的位置。尾随冒号不是必需的;多余的冒号将被忽略。各个参数及其位置高度依赖于设备。位置参数有两种类型:值和字母代码字符串。
值可以是整数(例如,记录大小)、字符串(例如,主机名),也可以是计算结果为值的变量或表达式。
字母代码字符串使用单个字母指定打开操作的设备特征。对于大多数设备,此字母代码字符串是位置参数之一。可以在字符串中指定任意数量的字母,并以任意顺序指定字母。字母代码不区分大小写。字母代码字符串用引号括起来;字母代码字符串中不允许有空格或其他标点符号(例外情况:K
和Y
后面可以跟以反斜杠分隔的名称:因此:K\Name\
)。例如,打开顺序文件时,可以指定字母代码字符串“ANDFW”
(附加到现有文件、创建新文件、删除文件、固定长度记录、写访问权限)。字母代码字符串参数的位置和单个字母的含义高度依赖于设备。
Keyword Parameters
关键字参数可以在参数列表中按任意顺序指定。参数列表可以完全由关键字参数组成,也可以混合包含位置参数和关键字参数。(通常,先指定位置参数(在其正确位置),然后指定关键字参数。)必须用冒号(:
)分隔所有参数(位置或关键字)。关键字参数的参数列表一般语法如下:
USE device:(/KEYWORD1=value1:/KEYWORD2=value2:.../KEYWORDn=valuen):"mnespace"
各个参数及其位置高度依赖于设备。作为一般规则,可以使用位置参数或关键字参数指定相同的参数和值。可以使用/params
关键字将字母代码字符串指定为关键字参数。
mnespace
包含此设备使用的设备控件助记符的助记符空间的名称。默认情况下,Caché提供两个助记空格:^%XMAG
用于磁带设备,^%X364
(兼容ANSI X3.64)用于所有其他设备和顺序文件。默认助记空格按设备类型分配。
转到管理门户,选择系统、配置、设备设置、IO设置。查看和编辑“文件”、“磁带”、“其他”或“终端助记空间”设置。
助记符空间是包含读和写命令使用的设备控制助记符的入口点的例程。读取和写入命令使用/mmemonic(Params)
语法调用这些设备控制助记符。这些设备控制助记符执行诸如将光标移动到指定的屏幕位置或倒带等操作。
使用mnespace
参数覆盖默认助记空间分配。指定包含与此设备一起使用的控件助记符入口点的ObjectScript例程。需要用双引号括起来。仅当计划将设备控件助记符与READ
或WRITE
命令一起使用时,才指定此选项。如果助记空间不存在,则Caché会发出<NOROUTINE>
错误。
示例
在本例中,use
命令将顺序文 "STUDENTS"
设置为当前设备,并设置文件指针,以便后续读取从文件开始处的偏移量256开始。
USE "STUDENTS":256
注意
设备所有权
设备所有权是通过OPEN
命令建立的。唯一的例外是主设备,它被分配给进程,通常是登录的终端。如果use
命令中指定的设备不属于该进程,则Caché会发出<NOTOPEN>
错误消息。
当前设备
当前设备是通过读写命令进行I/O操作的设备。读命令从当前设备获取输入,写命令将输出发送到当前设备。
Caché在$IO
特殊变量中维护当前设备的ID。如果使用请求成功,Caché会将$IO设置为指定设备的ID。%Library.Device
类的GetType()
方法返回当前设备的设备类型。
terminal
DHC-APP>w ##class(%Library.Device).GetType()
1
studio
w ##class(%Library.Device).GetType()
9
主设备
特殊设备号0(零)指的是主设备。每个进程都有一个主要设备。Caché在$PRINCIPAL
特殊变量中维护主体设备的ID。
terminal
DHC-APP>w $PRINCIPAL
|TRM|:|7864
studio
w $PRINCIPAL
|TCP|1972|16692
启动Caché时,主体设备会自动打开。最初,主体设备($PRINCIPAL
)和当前设备($IO
)相同。
发出USE
命令后,当前设备($IO
)通常是执行的上一个USE
命令中命名的设备。
尽管许多进程可以具有相同的主体设备,但一次只能拥有一个。在某个进程成功向设备发出OPEN
命令之后,其他任何进程都无法对该设备发出OPEN,直到第一个进程通过显式发出CLOSE
命令,暂停或由于该用户结束会话来释放该设备。
尽管可以从终端提示中为除主设备之外的其他设备发出OPEN
和USE
,但是Caché每次返回到>
提示时,都会隐式发出USE 0
。要继续使用非0的设备,必须在>提示符下输入的每一行中发出USE
命令。
当执行以下任一操作时,主要设备将自动成为当前设备:
- 登陆
- 发出
USE 0
命令。 - 在未设置错误陷阱时导致错误。
- 关闭当前设备。
- 返回终端提示。
- 通过发出停止命令退出Caché。
USE 0
表示对主体设备的OPEN
命令。如果另一个进程拥有该设备,则该进程将在隐式OPEN
上挂起,就像遇到任何OPEN
一样。
尽管USE 0
意味着主体设备的OPEN 0
,但是对进程不拥有的任何其他设备发出USE
命令(由于先前的OPEN
命令)会产生<NOTOPEN>
错误。
注意:虽然大多数Caché平台允许关闭主输入设备,但Cachéfor UNIX®不允许。因此,当另一个JOB
的子JOB
尝试在的登录终端上执行I/O时,它将挂起,直到注销Caché。此时,输出可能会出现,也可能不会出现。
在UNIX®r上使用空设备。
当向空设备发出OPEN
和USE
命令(在UNIX®上为/ dev / null
)时,Caché会将空设备视为虚拟设备。随后的READ
命令立即返回一个空字符串(“”
)。随后的WRITE命令立即返回成功的设备。没有读取或写入实际数据。在基于UNIX®的系统上,设备/ dev / null
完全绕过UNIX®的open
,write
和read
系统调用。
默认情况下,其他进程使用JOB
命令启动的进程的主体设备为/ dev / null
。
例如,如果打开/ dev / null
而不是在Caché内打开,则通过从UNIX®外壳将Caché输出重定向到/ dev / null
,UNIX®系统调用的作用与对任何其他设备的作用相同。