Linux中的文件系统

时间:2011-04-15 10:59:51

标签: linux linux-device-driver

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

以下是我现在所做的事情:

  1. 我使用linux dd命令创建了一个floppy.img,并在其中添加了一些文件;
  2. 我收集了一些有关FAT12文件系统的信息,并知道如何将数据排列在软盘中;
  3. 以下是我完全不知道的事情:

    1. 我知道很少有linux系统调用
    2. 现在我需要你的帮助,向我展示解决这个问题的条目。一些提示或文件也对我有很大的帮助!

3 个答案:

答案 0 :(得分:2)

您需要做的是在C中打开复制的图像。您需要阅读此数据,了解FAT12格式,修改它,然后将其写回。

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

1)fopen 2)将FAT转换为数组(根据需要使用fseek) 3)使用新条目修改数组 4)将新文件的数据写入图像的适当空闲区域 5)将更新的数组转换回FAT 6)fclose 7)测试图像

您可以通过以下方式测试图像:

mkdir / mnt / test -p mount -o loop -t vfat test.img / mnt / test

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我为前雇主写了一个完整的实施方案。幸运的是,FAT 非常 得到很好的支持,因为二进制格式和文件系统都会得到支持。

对此的规范性参考是Microsoft specification(FAT由Bill Gates于1976年构思),其中包括FAT12,FAT16和FAT32,它们都非常相似。

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