Filesystems 发展";“文件系统”;适用于linux、mac和windows

Filesystems 发展";“文件系统”;适用于linux、mac和windows,filesystems,Filesystems,dropbox等应用程序使用哪些技术(http://www.dropbox.com/)和expandrive(http://www.expandrive.com/mac)用于将功能直接构建到每个平台上的本地文件系统中?有人能提出一些建议,在所有主要平台上实现最大限度的代码重用吗 到目前为止,我只研究了linux上的FUSE,我喜欢我所看到的 您所追求的是usrspace文件系统。我不知道是否有统一的解决方案可以在所有(或大部分)平台上实现用户空间文件系统(可能没有),但这里有一个起点: 对于l

dropbox等应用程序使用哪些技术(http://www.dropbox.com/)和expandrive(http://www.expandrive.com/mac)用于将功能直接构建到每个平台上的本地文件系统中?有人能提出一些建议,在所有主要平台上实现最大限度的代码重用吗


到目前为止,我只研究了linux上的FUSE,我喜欢我所看到的

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

  • 对于linux和(我认为只有一些)Unice:
  • 对于windows:
  • 对于mac os:
我不熟悉所有这些,所以我不知道编写代理/接口代码有多容易,这样您就可以以独立于平台的方式无缝地实现文件系统。无论如何,文件系统应该支持的操作(在某种程度上)对每个人都是相同的(打开、读取、写入等),所以乍一看这似乎是一个简单的开始(即使用C预处理技术编码,你也可以看看C++库,它们应该是高度独立于平台的,并且提供一些与平台无关的开发工具)。
祝你好运!

在Windows上很容易监听文件更改:

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

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

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


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

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

  • 如果您打算开发一个本地文件系统,您所能做的最好的事情就是尽可能多地隔离您的文件系统算法(计算磁盘布局、校验和、目录数据结构等),除了操作系统特定的API外,还可以将其导入ansi-c。您可以阅读ZFS代码,该代码被认为编写得很好,因此移植到FreeBSD/Mac/Linux相对容易
  • 否则,如果您能够满足用户和文件系统的性能成本,那么跨Mac/Linux/BSD维护文件系统是微不足道的。使用每个平台上可用的POSIX API、FUSE和第三方库,这就是我现在正在做的。但是对于windows,我听说过FUSE实现,但我认为它不适合生产o、 与开发本机文件系统一样,尽量用ansi-c封装文件系统逻辑

  • 这是Mac OS FUSE实现的一个示例:

    dropbox客户端实际上并没有实现文件系统,它只是检查和更新现有文件。FUSE做了一些非常不同的事情。一般来说,最大限度的代码重用最好通过深思熟虑的体系结构和对问题的概括来实现。当然,在出现问题时,还可以选择编程语言/框架多平台开发。在dropbox的案例中……一般来说,他们是如何检测到文件被修改的?我真的不想深入了解他们的技术细节,但我很好奇他们是否只是在做一些幼稚的事情,比如扫描文件以获得修改后的时间戳,或者做一些更复杂的事情,比如实现某种修改文件时的通知/回调。后一种情况更有趣,我想知道在任何给定平台上是否可行。简单但不太可靠,并且有严重的限制。除了FUSE、Dokan、CBFS之外,还有Pismo文件挂载。PFM可用于在用户模式下在Mac和Windows上实现本机文件系统s、 和Linux。(完全公开:我是PFM的主要开发者。)