2011-04-15 115 views
-1

我有一个与Linux文件系统相关的实验室工作。问题是我需要检索软盘映像中的所有目录和文件。需要使用C语言来获取FAT12格式的软盘映像的目录和文件名。Linux中的文件系统

下面就是我现在做:

  1. 我已经使用Linux DD命令,并添加一些文件到它创造了一个floppy.img;
  2. 我已经收集了一些关于FAT12文件系统的信息,并且知道如何将数据安排在软盘中;

下面是我完全不知道有关:

  1. 我知道一点Linux系统调用

现在我需要你给我看解决这个问题的输入帮助。一些提示或文件也对我有很大的帮助!

+0

您使用dd将文件复制到图像?您应该先在该映像中创建一个文件系统,然后安装该映像并使用cp将文件复制到该映像中。 – halfdan 2011-04-15 11:01:38

+2

这功课吗?至少要很好地描述这个任务,并向我们展示你有什么。事实上,这不是一个真正的问题 – sehe 2011-04-15 12:42:03

回答

2

你需要做的是用C打开你的复制图像。你将需要读取这些数据,理解FAT12格式,修改它,然后将其写回。

使用“man”来看fopen,fread,fclose。您可能需要创建一个FAT结构数组,使用fread读入每个FAT条目,然后使用新条目修改您的数组,然后使用fwrite将其写回。你可能会想用fseek来跳转。我希望你想写一个新的入口到磁盘FAT表(原文如此),并且知道可用空间在哪里,在那里写实际的文件。

1)的fopen 2)的fread FAT成阵列(使用FSEEK如需要) 3)修改阵列与新条目 4)使用fwrite新文件数据到图像 5的适当的自由区)fwrite的更新阵列回FAT 6)FCLOSE 7)测试图像

可以通过一些测试图像是这样的:

MKDIR的/ mnt /测试-p 安装邻环-t VFAT测试。 img/mnt/test

如果失败了,那你就搞砸了。使用hexdump来检查你的文件。 如果有效,请确保在再次修改文件之前将其卸载。

+0

THX,sle!我对很长一段时间没有检查新答案感到后悔。幸运的是我找出了摆脱困境的方法。好吧,如果我以前检查过这个问题,我可能不需要为这么长时间而苦苦挣扎。我的方式和你的方式基本相同,但我使用Linux系统调用来读取光盘上的FAT和群集。 THX再次! – teedoo 2011-04-19 08:03:29

0

根据我的理解,您应该从纯粹的用户空间程序中的磁盘映像中读取数据。换句话说:你是而不是需要编写任何内核代码或驱动程序。

此任务仅使用标准C API可能,因此不需要特定于Linux的调用。

0

我已经为以前的雇主写过这个完整的实现。幸运的是FAT非常有很好的支持二进制格式和文件系统去。

此规范的参考文献是Microsoft specification(FAT在1976年由Bill Gates构思),它涵盖FAT12,FAT16和FAT32,它们都非常相似。

当您在用户空间中工作时,C stdio库将满足您的所有需求。