文章目录
第十九章 Caché 命令大全 OPEN 命令 - 重点
- 大纲
- 参数
- 描述
- 参数
-
- pc
- device
- parameters
- Positional Parameters
- Keyword Parameters
- timeout
- mnespace
- 示例
- 注意
-
- 设备所有权和当前设备
- 更改拥有的设备的参数
- 指定设备
-
- 使用物理设备号
- 使用设备别名
- 超过打开文件配额
- 默认记录长度
获取输入/输出操作的设备或文件的所有权。
重点- 打开设备要指定延迟秒,否则将无限等待。
OPEN:pc device:(parameters):timeout:"mnespace",... O:pc device:(parameters):timeout:"mnespace",...参数
- pc 可选-后置条件表达式。
- device 要打开的设备,由设备ID或设备别名指定。设备ID可以是整数(设备号)、设备名称或顺序文件的路径名。如果是字符串,则必须用引号引起来。对于Windows和UNIX®,设备的最大长度为256个字符,对于OpenVMS,最大长度为245个字符。
- parameters 可选-用于设置设备特性的参数列表。参数列表括在括号中,列表中的参数用冒号分隔。参数可以是位置参数(在参数列表中按固定顺序指定)或关键字(按任意顺序指定)。允许混合使用位置参数和关键字参数。各个参数及其位置和关键字高度依赖于设备。
- timeout 可选-等待请求成功的秒数,指定为整数。小数秒被截断为整数部分。如果省略,Caché将无限期等待。
- mnespace 可选-包含要与此设备一起使用的控件助记符的助记符空间的名称,指定为引号字符串。
使用OPEN命令获取用于输入/输出操作的指定设备(或多个设备)的所有权。在使用CLOSE命令释放所有权之前,OPEN将保留对设备的所有权。
打开命令可用于打开多个设备,方法是使用逗号分隔每个设备的规格。在设备规范中,其参数使用冒号(:)分隔。如果省略参数,则必须指定位置冒号;但是,尾随冒号不是必需的。
open命令可用于打开终端设备、磁带设备、后台处理设备、TCP绑定、进程间管道、命名管道和作业间通信等设备。
OPEN命令也可用于打开顺序文件。设备参数将文件路径名指定为带引号的字符串。参数指定控制顺序文件的参数。如果指定的文件不存在,这些参数可以包括创建新文件的选项。虽然可选,但强烈建议在打开顺序文件时指定超时参数。
使用%SYSTEM.Process类OpenMode()和FileMode()方法为当前进程设置顺序文件打开选项默认值,并使用Config.Miscellous类OpenMode和FileMode属性在系统范围内设置顺序文件打开选项默认值。
OPEN命令不用于访问 Caché 数据库文件。
在Windows上,CachéObjectScript在数据库文件和使用OPEN打开的文件之间为每个进程分配打开的文件配额。当OPEN导致太多文件分配给OPEN命令时,会收到<TOOMANYFILES>错误。Caché不限制打开的文件数;每个进程的最大打开文件数是特定于平台的设置。
参数pc
可选的后置条件表达式。如果后置条件表达式为TRUE(计算结果为非零数值),则Caché执行OPEN命令。如果后置条件表达式为假(计算结果为零),则Caché不执行OPEN命令。即使OPEN命令打开多个设备或文件,也只允许一个后置条件。
device
要打开的设备。可以使用以下任一选项指定设备:
- 物理设备编号,指定为正整数。例如,2始终是后台处理设备。这是指定磁带设备(编号47到62)的唯一方式。此编号在Caché内部,与平台操作系统分配的设备编号无关。
- 设备ID,以带引号的字符串形式指定。 例如, "|TRM|:|4294318809". 当前设备的此值位于$IO特殊变量中。
- 设备别名,指定为正整数。设备别名是指物理设备号。
- 文件路径名,指定为带引号的字符串。用于打开顺序文件。路径名可以是规范的(c:\myfiles\testfile),也可以是相对于当前目录的 (\myfiles\testfile)。
parameters
用于设置要打开的设备的操作特性的参数列表。如果有多个参数,则需要使用括号。(指定参数时始终使用括号是很好的编程方式。) 请注意左括号前所需的冒号。在括号内,冒号用于分隔多个参数。
可以使用位置参数或关键字参数指定设备的参数。还可以在同一参数列表中混合使用位置参数和关键字参数。
在大多数情况下,指定相互矛盾、重复或无效的参数值不会导致错误。只要有可能,Caché就会忽略不适当的参数值,并采用适当的默认值。
如果未指定参数列表,Caché将使用设备的默认参数。设备的默认参数是可配置的。转到管理门户,选择[主页]>[配置]>[设备设置]>[设备]以显示当前的设备列表。对于所需设备,单击“编辑”以显示其打开参数:选项。指定此值的方式与指定OPEN命令参数的方式相同,包括括号。例如(“avl”:0:2048)。
可用的参数特定于要打开的设备类型。
Positional Parameters
必须在参数列表中以固定顺序指定位置参数。可以省略位置参数(并接收默认值),但必须保留冒号以指示省略的位置参数的位置。尾随冒号不是必需的;多余的冒号将被忽略。各个参数及其位置高度依赖于设备。位置参数有两种类型:值和字母代码字符串。
值可以是整数(例如,记录大小)、字符串(例如,主机名),也可以是计算结果为值的变量或表达式。
字母代码字符串使用单个字母指定打开操作的设备特征。对于大多数设备,此字母代码字符串是位置参数之一。可以在字符串中指定任意数量的字母,并以任意顺序指定字母。字母代码不区分大小写。字母代码字符串用引号括起来;字母代码字符串中不允许有空格或其他标点符号(例外情况:K和Y后面可以跟以反斜杠分隔的名称:因此:K\Name\ )。例如,打开顺序文件时,可以指定字母代码字符串“ANDFW”(附加到现有文件、创建新文件、删除文件、固定长度记录、写访问权限)。字母代码字符串参数的位置和单个字母的含义高度依赖于设备。
Keyword Parameters
关键字参数可以在参数列表中按任意顺序指定。参数列表可以完全由关键字参数组成,也可以混合包含位置参数和关键字参数。(通常,先指定位置参数(在其正确位置),然后指定关键字参数。)必须用冒号(:)分隔所有参数(位置或关键字)。关键字参数的参数列表一般语法如下:
OPEN device:(/KEYWORD1=value1:/KEYWORD2=value2:.../KEYWORDn=valuen):timeout
各个参数及其位置高度依赖于设备。作为一般规则,可以使用位置参数或关键字参数指定相同的参数和值。可以使用/params关键字将字母代码字符串指定为关键字参数。
timeout
等待打开请求成功的秒数。前面的冒号是必需的。超时必须指定为整数值或表达式。如果超时设置为零(0),则OPEN将尝试一次打开文件。如果尝试失败,则打开立即失败。如果尝试成功,则会成功打开该文件。如果未设置超时,则Caché将继续尝试打开设备,直到打开成功或手动终止该过程。如果使用超时选项并且设备已成功打开,则Caché会将$test特殊变量设置为1(True)。
如果设备在超时期限内无法打开,Caché会将$test设置为0(False)。请注意,$test也可以由用户设置,也可以由JOB、LOCK或READ超时设置。
mnespace
包含此设备使用的设备控件助记符的助记符空间的名称。默认情况下,Caché提供两个助记空格:^%XMAG用于磁带设备,^%X364(兼容ANSI X3.64)用于所有其他设备和顺序文件。默认助记空格按设备类型分配。
进入管理门户,选择[主页]>[配置]>[设备设置]>[IO设置]。查看和编辑“文件”、“磁带”、“其他”或“终端助记空间”设置。
助记符空间是包含READ和WRITE命令使用的设备控制助记符的入口点的例程。READ和WRITE命令使用/mmemonic(Params)语法调用这些设备控制助记符。这些设备控制助记符执行诸如将光标移动到指定的屏幕位置或倒回磁带的操作。
使用mnespace参数覆盖默认助记空间分配。指定包含与此设备一起使用的控件助记符入口点的CachéObjectScript例程。需要用双引号括起来。仅当计划将设备控件助记符与READ或WRITE命令一起使用时,才指定此选项。如果助记空格不存在,则返回<NOROUTINE>错误。
示例在下面的示例中,open命令尝试获取设备2(后台处理设备)的所有权。第一个位置参数(3)指定^spool全局内的文件号,第二个位置参数(12)指定文件内的行号。如果稍后使用Use命令将其设置为当前设备(即使用2),则CachéObjectScript会将后续输出发送到后台处理设备程序。
OPEN 2:(3:12)
在下面的示例中,open命令尝试在10秒的超时期限内获取顺序文件客户的所有权。
OPEN "\myfiles\customer"::10
请注意,由于未指定参数,因此省略了圆括号,但必须存在冒号。
下面的示例打开一个名为Seqtest的顺序文件;字母代码位置参数为“NRW”。字母代码“N”指定如果文件不存在,则使用此名称创建一个新的顺序文件。“R”和“W”字母代码指定正在打开文件以进行读写。超时时间为5秒。
/// d ##class(PHA.TEST.Command).TestOPEN() ClassMethod TestOPEN() { ZNSPACE "%SYS" SET dir=##class(%SYSTEM.Process).CurrentDirectory() ; 确定 Caché 目录 SET seqfilename=dir_"Samples\Seqtest" OPEN seqfilename:("NRW"):5 WRITE !,"打开名为Seqtest的顺序文件" USE seqfilename WRITE "顺序文件的一行数据" CLOSE seqfilename:"D" WRITE !,"已关闭并已删除序列测试" QUIT }
DHC-APP>d ##class(PHA.TEST.Command).TestOPEN() 打开名为Seqtest的顺序文件 已关闭并已删除序列测试
此示例要求未知用户已分配%DB_CACHESYS角色。
注意设备所有权和当前设备
OPEN将建立指定设备的所有权。该进程保留对该设备的所有权,直到该进程终止或使用后续的关闭命令释放该设备。当设备归进程所有时,任何其他进程都不能获取或使用该设备。
一个进程可以同时拥有多个设备。但是,只有一个设备可以是当前设备。可以使用use命令将拥有的设备建立为当前设备。当前设备的ID在$IO特殊变量中找到。
一个进程始终至少拥有一个设备(指定为设备0),这是它的主设备。此设备在进程启动时分配给它,通常是用于登录到Caché的终端。主设备的ID在$PRIMAL特殊变量中找到。
当进程终止时,Caché会为该进程拥有的每个设备发出隐式关闭命令,并将它们返回到可用设备池。
更改拥有的设备的参数
要更改进程已拥有的设备的参数,可以:
- 关闭设备,然后使用新参数值重新打开设备。
- 如果设备是终端、TCP或磁带设备,则可以在已打开的设备上发出带有新参数值的OPEN命令。
如果在另一个OPEN命令上指定设备,则初始OPEN命令设置的任何设备参数将保持有效,除非显式更改。根据设备类型的不同,后续I/O可能与关闭然后重新打开设备时有所不同。
对于某些设备,可以省略PARAMETERS选项,然后使用USE命令上的PARAMETERS选项设置所需的特性。
指定设备
打开设备时,可以通过提供分配给该设备的设备编号或别名来标识该设备。
使用物理设备号
Caché允许通过提供系统分配的物理设备编号来识别某些设备。Caché的所有实现都可以识别以下物理设备编号:
- 0 = 进程的主要设备(通常是登录的设备)。
- 2 = 后台处理程序 (用于存储输出以供以后打印)。
- 63 = 视图缓冲区。
Open 63接受命名空间,如以下示例所示:
OPEN 63:"SAMPLES"
如果指定的名称空间不存在,则Caché会发出<nampace>错误。如果指定了一个没有权限的名称空间,则Caché会发出<PROTECT>错误。
设备3是OpenVMS中的保留设备。在所有其他平台上,它都是无效设备;在没有等待超时到期的情况下,尝试打开它会返回<NOTOPEN>错误。
使用设备别名
别名是备用数字设备ID。它必须是有效的设备编号,必须是唯一的,并且不能与分配的设备编号冲突。
可以为设备建立数字别名。转到管理门户,选择[主页]>[配置]>[设备设置]>[设备]以显示设备及其别名的当前列表。对于所需的设备,请单击“编辑”以编辑其Alias:选项。
为设备分配别名后,可以使用open命令或%is实用程序打开使用此别名的设备。
超过打开文件配额
Caché在数据库文件和使用OPEN打开的文件之间分配每个进程的打开文件配额。当OPEN导致太多文件分配给OPEN命令时,会收到<TOOMANYFILES>错误。
默认记录长度
如果未在OPEN命令中指定顺序文件的记录大小,则无论是否启用长字符串,Caché都假定默认记录长度为32,767个字符。