实现基本文件系统

时间:2010-02-03 04:50:52

标签: linux file filesystems

作为一个大学项目,我需要从文件中实现基本文件系统。那么我该怎么做呢?我需要知道的是什么?要求包括在后台进行守护进程。此外,使用此系统的应用程序需要使用Unix域套接字连接到服务器

文件系统应具有以下功能:

  1. 列出与其大小一起存储的文件。
  2. 创建文件
  3. 允许更改文件
  4. 删除文件

4 个答案:

答案 0 :(得分:3)

这是一个非常非常基本的FUSE实现的an example,它由一个美化的共享内存段(xenstore)支持。它是我维护的原始xenstore FUSE文件系统的一个分支。

您还可以找到一些代码,向您展示在调试FUSE实现时如何使Valgrind更有用。

您为open / create / read / write / truncate / getattr / etc编写函数并将它们传递给fuse(行号来自链接示例):

   343 static struct fuse_operations const xsfs_ops = {
   344  .getattr = xsfs_getattr,
   345  .mknod = xsfs_mknod,
   346  .mkdir = xsfs_mkdir,
   347  .unlink = xsfs_rm,
   348  .rmdir = xsfs_rmdir,
   349  .truncate = xsfs_truncate,
   350  .open = xsfs_open,
   351  .read = xsfs_read,
   352  .write = xsfs_write,
   353  .readdir = xsfs_readdir,
   354  .create = xsfs_create,
   355  .destroy = xsfs_destroy,
   356  .utime = xsfs_utime,
   357  .symlink = xsfs_symlink,
   358  .init = (void *)xsfs_init
   359 };

正如你所看到的,它极其自我解释。一点点搜索将导致找到许多基本文件支持的FUSE实现示例。

我强烈建议完全在用户空间中完成,除非你有足够的时间熟悉内核。

答案 1 :(得分:2)

检查一下是否可以提供帮助。 http://www.geocities.ws/ravikiran_uvs/articles/rkfs.html

如果要在用户空间中创建文件系统,FUSE可以为您提供帮助。 http://fuse.sourceforge.net/

答案 2 :(得分:1)

文件系统实际上是文件的数据库。您需要的主要内容是用于存储字节偏移和文件长度的查找表。文件名也可以存储在表中,或者它们可以存储在每个偏移量的前几个字节中。如果您将文件系统设置为固定大小,将会更容易。

这与FAT文件系统的工作方式类似。

您还可以查看http://en.wikipedia.org/wiki/Database_storage_structures,因为在最低级别文件系统和数据库非常相似。

答案 3 :(得分:0)

最简单的方法是构建一个用于存储数据的模板,并将文件解析为ram,当然,这不是最有效的。

像...一样的东西。

SOME / LOCATION / Filename>>> 这里的文件内容,等等等等 <<< SOME / OTHER / LOCATION / File2Name>>> 这里的另一个文件的内容 <<<

然后列出一个目录,使用正则表达式查找以>>>>结尾的所有行,然后解析到第X个斜杠(基于搜索文件夹中的斜杠数),并做一个案例(在)敏感搜索,基于您是否希望它区分大小写。当然,正如我提到的将它加载到内存中,你可以搜索一个key->值的hashmap,这可能会简单得多。