2011-01-29 142 views
12

Dropbox(http://www.dropbox.com/)和expandrive(http://www.expandrive.com/mac)等應用程序使用什麼技術在每個平臺上的本地文件系統中構建功能?任何人都可以提出任何可以在所有主要平臺上重複使用代碼的任何內容嗎?爲linux,mac,windows開發「文件系統」

我只在Linux上看過FUSE到目前爲止,我喜歡我所看到的。

+3

投寄箱客戶端不實際實現的文件系統,它只是檢查和更新現有的文件。 FUSE做了非常不同的事情。 – 2011-01-29 16:05:33

+0

一般來說,最好的代碼重用最好通過考慮周全的架構和問題來實現。而且,當然,在多平臺開發的情況下選擇編程語言/框架。 – 2011-01-29 16:09:20

+0

在保管箱的情況下......一般來說他們如何檢測文件已被修改?我真的不想進入他們的技術細節,但我很好奇他們是否只是在做一些天真的事情,比如掃描修改過的時間戳的文件,或者更復雜的東西,比如當文件是實現某種通知/回調時改性。後一種情況會更有趣,我想知道它是否可以在任何特定平臺上使用。 – mcot 2011-01-29 16:14:06

回答

5

實現一個虛擬文件系統是非常特定於OS。原因是驅動程序的體系結構在類Unix操作系統和Windows中不同。

爲避免編寫自己的驅動程序,可以使用用戶模式文件系統工具包。在Linux,BSD和MacOS上分別存在FUSE和OSXFUSE(現在非活動的MacFUSE的分支)。在Windows上,我們使用了Callback File System

Dropbox目前沒有虛擬文件系統,但只有外殼擴展(afaik他們計劃創建一個虛擬磁盤,但我不知道他們已經決定)。

關於文件更改的跟蹤方式:有幾種方法。最簡單的方法是掃描定時器上的目錄並比較時間戳和文件大小。接下來,可以使用FindFirstChangeNotification WinAPI函數。最複雜和最可靠的方法是使用文件系統過濾器驅動程序。在Windows上,我們可以使用CallbackFilter。在MacOS X和Linux上,您可以獲得類似於FileSystemWatcher在.NET/Windows中提供的後通知。特別是在Linux上,可以使用inotify

3

你在做什麼是usrspace文件系統。我不知道是否有適用於在所有實現用戶空間文件系統的統一解決方案(或最全的)平臺(可能不是),但這裏有一個出發點:

  • Linux和(我認爲只有一些) Unix系統:fusefs
  • 對於Windows:dokan
  • 爲Mac OS:macfuse

我不熟悉所有的人,所以我不知道是多麼容易編寫代理/接口,這樣你就可以無縫地在平臺獨立中實現文件系統ndent的態度。無論如何,文件系統應該支持的操作(在某種程度上)對於每個人來說都是相同的(開放,讀取,寫入等),所以乍一看這似乎是一個簡單的開始(即使用C預處理技術編碼,雖然你可能想看看C++ boost庫,它們應該是高度平臺獨立的,並提供一些很好的平臺獨立開發工具)。

祝你好運!

1

我遇到過類似的問題:開發「跨平臺」文件系統。

  1. 如果你要開發一個本地文件系統,你能做的最好的就是嘗試儘可能多的隔離爲您的文件系統的算法(計算磁盤佈局,校驗和,目錄數據結構等),除了os特定的API,轉換成ansi-c。您可以閱讀ZFS代碼,這被認爲寫得很好,因此可以很容易地轉到FreeBSD/Mac/Linux。否則,如果您可以滿足用戶文件系統的性能成本,那麼在Mac/Linux/BSD之間維護文件系統是微不足道的。使用每個平臺上提供的POSIX API,FUSE和第三方庫,這正是我現在所做的。然而,對於Windows,我已經聽說過FUSE的實現,但我認爲它不是生產就緒。因此,與開發本機文件系統一樣,儘可能將您的文件系統邏輯封裝在ansi-c中。