FMCOS文件系统应注意文件标识符的合理规划

本文探讨了FMCOS2.0中SELECT命令在P1=00时出现的异常现象,包括无条件选中当前DF、错误选中同级DF以及无法选中特定文件的情况。作者通过实例展示了这些异常,并建议在设计文件结构时避免文件标识符冲突,确保目录名的独特性。

根据FMCOS 2.0手册中的描述,选择文件(SELECT)命令,有两种使用方法,分别时按文件标识符选择(P1=00)和按目录名选择(P1=04)。

其中P1=00时,表示选择当前目录下基本文件或子目录文件;P1=04时,表示选择当前目录的平级目录、当前目录的子目录。

在实际开发中笔者观察到,SELECT命令P1=00时,会存在一些手册中未描述的异常反应。

现在以FM1208-10(7K+1K M1)卡片做示范,卡片内文件结构如下:
 

3F00(MF)

        ┗1000(一级DF),目录名01 10 00 FF FF
                ┗1000(二进制)(无法选择,无法读取)
                ┗2000(二级DF),目录名02 20 00 FF FF(正常选择)

        ┗1001(一级DF),目录名01 10 01 FF FF
                ┗1000(二级DF),目录名02 10 00 FF FF(正常选择)
                        ┗0020(二进制)(正常选择,正常读取)
                ┗1100(二进制)(正常选择,正常读取)

        ┗1100(一级DF),目录名01 11 00 FF FF
                ┗1100(二级DF),目录名02 11 00 FF FF(只能用目录名选择)
                        ┗0010(二进制)(正常选择,正常读取)

        ┗1111(二进制)(正常选择,正常读取)

现象一:SELECT命令会无条件地选中当前DF本身

在3F00\1000中 ,执行select 1000,会选中3F00\1000本身,而不会选中3F00\1000\1000(二进制)。

在3F00\1001中,执行select 1001命令,会选中3F00\1001本身,而不会返回6A82(文件找不到)状态码。

在3F00\1100中,执行select 1100,会选中3F00\1100本身,而不会选中3F00\1100\1100(二级DF)。

现象二:如果当前DF下没有要找的文件,SELECT命令会选中与当前DF同级的其他DF

在3F00\1000中,执行select 1001,会选中3F00\1001,而不会返回6A82(文件找不到)状态码。

在3F00\1100中,执行select 1000,会选中3F00\1000,而不会返回6A82(文件找不到)状态码。

在3F00\1001中,执行select 1100,会选中3F00\1001\1100(二进制),这是正常且符合预期的表现。

现象三(正常现象):SELECT命令【不会】选中与当前DF同级的其他EF

在3F00\1100中,执行select 1111,会返回6A82(文件找不到)状态码,这是正常且符合预期的表现。

补充:

一 、子目录与父目录的文件标识符相同,可以使用目录名选择子目录。前提是子目录的目录名有别于父目录;

注意,这个特性只能在一部分卡片上实现,目前发现有的卡片不支持这个特性——这意味着子目录与父目录的文件标识符相同,子目录永远无法被选中。

二、EF与父目录的文件标识符相同,EF无法被选中。

因此,设计FMCOS文件结构时,应注意合理规划文件标识符。特别是应避免使用父目录的文件标识符、父目录平级目录的文件标识符。

新建DF时,目录名一定要起一个有意义的名字,而且所有DF的目录名不要设置为相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值