为linux,mac,windows开发“文件系统”

时间:2011-01-29 16:02:44

标签: filesystems

dropbox(http://www.dropbox.com/)和expandrive(http://www.expandrive.com/mac)等应用程序使用哪些技术在每个平台上的本地文件系统中构建功能?任何人都可以提出任何可以在所有主要平台上重复使用代码的建议吗?

到目前为止,我只在linux上查看了FUSE,我喜欢我所看到的。

5 个答案:

答案 0 :(得分:5)

实现虚拟文件系统非常特定于操作系统。原因是驱动程序的体系结构在类Unix操作系统和Windows中是不同的。

为避免编写自己的驱动程序,可以使用用户模式文件系统工具包。在Linux,BSD和MacOS上分别存在FUSE和OSXFUSE(现在不活动的MacFUSE的分支)。在Windows上,我们使用了Callback File System

目前Dropbox没有虚拟文件系统,只有shell扩展(他们计划创建一个虚拟磁盘,但我不知道他们已经决定了什么)。

关于如何跟踪文件更改:存在多种方法。最简单的方法是在计时器上扫描目录并比较时间戳和文件大小。接下来,可以使用FindFirstChangeNotification WinAPI函数。最复杂,最可靠的方法是使用文件系统过滤器驱动程序。在Windows上,我们可以使用CallbackFilter。在MacOS X和Linux上,您可以获得类似于FileSystemWatcher在.NET / Windows中提供的后通知。特别是在Linux上,可以使用inotify

答案 1 :(得分:4)

你所追求的是usrspace文件系统。我不知道是否有一个统一的解决方案可以在所有(或大多数)平台上实现用户空间文件系统(可能不是),但这是一个起点:

  • for linux和(我认为只有一些)unices:fusefs
  • for windows:dokan
  • for mac os:macfuse

我不熟悉所有这些,所以我不知道代理/接口代码是多么容易,因此您可以以独立于平台的方式无缝地实现文件系统。无论如何,文件系统应该支持的操作(在某种程度上)对每个人来说都是相同的(打开,读取,写入等),所以乍一看这似乎是一个简单的开始(即使使用C预处理技术编码,虽然你可能想看看C ++ boost库,它们应该是高度独立于平台的,并提供一些很好的平台独立开发工具。)

祝你好运!

答案 2 :(得分:1)

我遇到了类似的问题:开发“跨平台”文件系统。

  1. 如果您要开发本机文件系统,您可以做的最好的事情就是尝试隔离文件系统算法(计算磁盘布局,校验和,目录数据结构等),除了os-特定的API,进入ansi-c。您可以阅读ZFS代码,该代码编写得很好,因此可以相对轻松地移植到FreeBSD / Mac / Linux。
  2. 否则,如果您能满足用户域文件系统的性能成本,那么在Mac / Linux / BSD上维护文件系统是微不足道的。在每个平台上使用POSIX API,FUSE和第三方库,这就是我现在正在做的事情。但是对于Windows,我听说过FUSE实现,但我不认为它是生产就绪的。因此,与开发本机文件系统一样,尝试尽可能地将文件系统逻辑封装在ansi-c中。

答案 3 :(得分:0)

在Windows上监听文件更改非常容易: http://msdn.microsoft.com/en-us/library/atwhk15d(v=vs.80).aspx

答案 4 :(得分:0)

这是Mac OS FUSE实施的一个示例: http://www.macupdate.com/app/mac/23729/macfuse