@文件标识符由于BT-Basic源生于Unix操作系统,在这个操作系统中设备是文件系统的一部分,所以文件和设备都通过文件标识符进行寻址。
当一个I/O语句通过来访问文件(设备)时,该文件会在访问开始时打开,但一旦访问完成就会关闭。每次访问文件时,都会从文件的开头开始。只要你不需要连续的串行访问,这种寻址方法是可以接受的。
此外,我们可能希望在程序执行期间对文件(设备)拥有独占控制,以防止系统中的其他进程干扰我们的程序。这可以通过为文件分配一个@来实现,然后通过@文件标识符而不是通过其正常标识符来访问文件。
当一个文件或设备被分配一个@(通过assign to语句进行赋值),该文件将被打开进行访问,直到@被取消之前都保持打开状态。对该文件或设备的连续访问将是串行的,下一次访问从上一次访问停止的地方开始。你在打开文件时,需要指定你是想读取或写入它,并且是否希望独占使用——即在你关闭它之前,其他任何进程或用户都不能访问它或者共享使用。
如果你要写入它,还需要指定你是想创建一个新文件,还是写覆盖或附加到现有文件上。
一个文件或设备由包含该文件中数据的一条或多条记录组成。记录的长度取决于其中的数据量。一条记录可以包含0到2044个字符(包含空格)。一条存在但没有内容的记录被称为空记录。如果尝试在一条记录中存储超过2044个字符,则会发生错误。如果你尝试输入一条超过2044个字符的记录,额外输入的字符将被截断且不处理。
通过output或print语句将数据写入文件或设备。在写入过程中,当发送EOL(行结束)序列时,当前记录结束。这会在记录中生成一个EOR(记录结束)标记。假设有更多数据,则会开始一个新记录。
如果输出操作使用段落格式化,则最大可以的记录长度为80个字符,在写入文件的时候要注意这个问题,超过长度那部分数据会被丢弃。
实际上最大记录长度取决于将输出数据发送到的设备的最大行长度。如果要发送的记录长于设备所能接受的长度,则该记录会自动分成两个或更多合适长度的记录,以确保数据无损发送。如果使用自定义格式,则最多可以传输2044个字符的记录。
不同的设备需要不同的终止序列来正确终止写入它们的数据。系统知道所有标准设备和所有可以连接的标准选项所需的序列。然而,由于系统可能同时拥有GPIB和RS-232接口,可能无法识别机器上的设备是通过哪种接口进行通信。为此,image语句提供了一个抑制EOL(,你可以使用它来防止系统向GPIB或RS-232设备发送其EOL信息。这样就可以发送正确的字符序列,以终止发送到该设备的数据。抑制EOL规范只能用于GPIB和RS-232设备。
有一点要注意的是:
测试系统在I/O操作过程中不对数据执行任何奇偶校验。
over覆盖,从文件头开始写,意味着现有文件中的数据将被丢失;append保留现有数据并在文件尾部添加新数据;new新建,如果已经存在则会报错;shared共享访问允许一个人写入,而其他人读取或写入文件,一般不推荐使用,容易破坏数据完整性;exclusive独占式访问,不允许其它用户进行访问。assign @Notes to "D:/notes";write,over,exclusive !打开文件
output @Notes: A,B,C !输出变量中的数据到文件中
output @Notes: Q,R,X
assign @Notes to * ! 关闭文件
assign @CONTENT , Err to "readme.txt" ; read !打开文件
if Err= 0 then !判断是否正常打开文件
loop
Line$=""
enter @CONTENT ,,Err ; Line$ !每次只读文件中的一行
exit if Err=101007 !读到结尾时会产生一个错误代码,出现这个代码则退出循环
print Line$
end loop
assign @CONTENT to * !关闭文件
else
print "Can't read the file"
end if
assign @DVM to "/dev/dvm1";read, write, exclusive !分配@DVM到"/dev/dvm1";读取,写入,独占
output @DVM;"D0 Z0 FL0 T4 F3 1STI 1STN .1STD M0 R5" !向设备输出指令
trigger @DVM !等待设备触发
enter @DVM; Dvm_reading !读取设备返回值到变量中
assign @DVM to * !释放设备
如果一个磁盘文件(不是设备)被打开用于读写,第一次访问该文件的I/O语句将决定操作类型是读取还是写入。后续的访问必须是相同的类型,直到@文件标识符被取消并且文件可以重新打开。
将文件打开进行多次访问比每次访问都打开然后关闭要快。只要文件是打开的,系统就知道文件的位置,可以直接访问它,而不用在磁盘上搜索。作为经验法则,当从程序中访问文件和设备时,应该使用@文件标识符。使用文件标识符虽然在从键盘进行交互操作时很有用,但在程序中用途有限。