1

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

这就是问题所在。假设两条不同的路径将您带到同一个目录。如果您随后..向上跟踪目录,则问题变得比仅从列表中删除最后一个目录名称更复杂。如果..带你走你没有下来的路径,你实际上必须确定一个全新的工作目录。

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

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

4

3 回答 3

1

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

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

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

于 2012-12-04T19:29:29.247 回答
0

有两个父目录指向同一个子目录并不重要,因为的目录堆栈中没有这种二元性。当用户发出cd ..命令时,只需弹出堆栈即可。

于 2012-10-30T06:51:41.663 回答
0

四处询问,有经验的操作系统人员告诉我,FAT 没有明确禁止循环,但它会增加所有实现都忽略它的复杂性。毕竟,标准操作系统无法在没有位级黑客攻击的情况下创建这样的循环。因此,这个问题可以忽略。

于 2012-11-01T03:27:36.887 回答