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