FAT是否禁止无向循环?

时间:2012-10-30 06:34:42

标签: graph tree operating-system cycle fat

出于教育目的,我正在使用自己的FAT阅读器(允许您浏览驱动器等)。我当前的问题是确定当前的工作目录(例如在典型的命令提示符中的提示)。据我所知,目录表没有提供有关您到达那里的路径的信息。 (我一直在处理我找到的标准here)因此,我当前的方法只是跟踪您通过的每个目录(即基本上每次使用cd <dir>时,将该值放入列表,并在使用cd ..时删除最后一个

这就是问题出现的地方。让我们说两条不同的路径将您带到同一目录。如果您然后向上关注..目录,则问题变得比从列表中删除最后一个目录名更复杂。如果..引导你走上了没有下来的道路,你实际上必须确定一个全新的工作目录。

如果FAT不允许无向循环,则此问题变得无关紧要。 (我相信我读到某些文件系统因为简化遍历这个原因而不允许这种复杂性,但我找不到FAT的具体信息)我需要担心这个吗?换句话说,FAT是由树还是通用图描述的?

作为参考,我正在处理FAT16和FAT32(顺便提一下在Linux上的C语言,但我认为这是无关紧要的)

3 个答案:

答案 0 :(得分:1)

FATx格式中没有任何内容禁止循环。但是,如果允许循环,还有其他问题:

  • 正如所指出的,&#34; ..&#34;当两个目录条目指向同一目录时,它是不明确的。通常不是很重要,因为DOS / WINDOWS维护目录的全文并执行&#34; cd ..&#34;是名称操作,而不是目录遍历。 *另一方面,NIX会有问题。
  • 没有引用计数,这意味着RMDIR X无法有效释放磁盘空间,除非它执行整个树步骤以查看是否有对该目录的任何其他引用。
  • 更糟糕的是,有可能&#34;断开&#34;从根开始的循环,留下CHKDSK / fsck需要清理的无法到达的空间。

(N.B。这些是* NIX不允许硬链接到目录的一些原因。)

答案 1 :(得分:0)

无论如何,有两个父目录指向同一个子目录,而在目录堆栈中没有这种二元性。当用户发出cd ..命令时,只需弹出堆栈就可以了。

答案 2 :(得分:0)

询问周围,经验丰富的操作系统人员告诉我,FAT没有明确禁止循环,但它会增加所有实现忽略它的复杂性。毕竟,标准操作系统没有提供一种方法来创建这样一个没有位级黑客攻击的循环。因此,这个问题可以忽略不计。