作为一个大学项目,我需要从文件中实现基本文件系统。那么我该怎么做呢?我需要知道的是什么?要求包括在后台进行守护进程。此外,使用此系统的应用程序需要使用Unix域套接字连接到服务器
文件系统应具有以下功能:
答案 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,这可能会简单得多。