2011-01-29 54 views
12

Công nghệ nào làm các ứng dụng như dropbox (http://www.dropbox.com/) và expandrive (http://www.expandrive.com/mac) sử dụng để xây dựng chức năng ngay vào hệ thống tập tin cục bộ trên mỗi nền tảng? Bất cứ ai có thể đề xuất bất cứ điều gì mà sẽ cho phép tái sử dụng mã tối đa trên tất cả các nền tảng chính?Phát triển "Hệ thống tệp" cho linux, mac, windows

Tôi chỉ xem xét FUSE trên Linux cho đến giờ và tôi thích những gì tôi thấy.

+3

Tài khoản đăng khách hàng không thực sự thực hiện một hệ thống tập tin, nó chỉ đơn thuần là kiểm tra và cập nhật các file đang tồn tại. FUSE làm điều gì đó rất khác biệt. –

+0

Nói chung, việc sử dụng lại mã tối đa đạt được tốt nhất thông qua kiến ​​trúc cũng như khái quát hóa vấn đề. Và, như một vấn đề của khóa học, lựa chọn một ngôn ngữ lập trình/khuôn khổ trong trường hợp phát triển đa nền tảng. –

+0

Trong trường hợp dropbox ... Nói chung, làm cách nào để phát hiện tệp đã được sửa đổi? Tôi thực sự không muốn tìm hiểu chi tiết về công nghệ của họ, nhưng tôi tò mò nếu họ chỉ đơn giản là làm một cái gì đó ngây thơ như quét các tệp cho dấu thời gian được sửa đổi hoặc điều gì đó tinh vi hơn như triển khai một số loại thông báo/gọi lại khi tệp đã sửa đổi. Trường hợp thứ hai sẽ thú vị hơn và tôi muốn biết nếu nó có thể có trên bất kỳ nền tảng nào. – mcot

Trả lời

5

Thực hiện một hệ thống tập tin ảo là rất OS cụ thể. Lý do là kiến ​​trúc của các trình điều khiển khác nhau trong hệ điều hành giống Unix và trong Windows.

Để tránh viết trình điều khiển của riêng bạn, bạn có thể sử dụng bộ công cụ hệ thống tệp chế độ người dùng. Trên Linux, BSD và MacOS có tồn tại FUSE và OSXFUSE (ngã ba của MacFUSE hiện tại không hoạt động) tương ứng. Trên Windows, chúng tôi sử dụng Callback File System.

Dropbox tại thời điểm này không có hệ thống tệp ảo nhưng chỉ có tiện ích mở rộng vỏ (họ đã lên kế hoạch tạo đĩa ảo nhưng tôi không biết họ đã quyết định điều gì).

Về cách thay đổi tệp được theo dõi: có tồn tại một số phương pháp. Cách đơn giản nhất là quét thư mục trên bộ đếm thời gian và so sánh dấu thời gian và kích thước tệp. Tiếp theo, người ta có thể sử dụng chức năng FindFirstChangeNotification WinAPI. Và phương pháp tinh vi nhất và đáng tin cậy nhất là sử dụng trình điều khiển bộ lọc hệ thống tập tin. Trên Windows, chúng tôi có thể sử dụng CallbackFilter. Trên MacOS X và trên Linux, bạn có thể nhận được thông báo sau tương tự như những gì FileSystemWatcher cung cấp trong .NET/Windows. Đặc biệt, trên Linux, người ta có thể sử dụng inotify.

3

Những gì bạn sau là hệ thống tệp usrspace. Tôi không biết nếu có một giải pháp thống nhất để thực hiện hệ thống tập tin userspace trên tất cả (hoặc hầu hết tất cả) các nền tảng (có thể là không), nhưng đây là một điểm khởi đầu:

  • cho Linux và (Tôi nghĩ rằng chỉ có một số) unices: fusefs
  • cho các cửa sổ: dokan
  • cho mac os: macfuse

tôi không quen thuộc với tất cả chúng vì vậy tôi không biết làm thế nào dễ dàng là để mã hóa các proxy/interfaces để bạn có thể liên tục triển khai hệ thống tập tin trong nền tảng-indepe theo cách thức. Dù sao, các hoạt động mà một hệ thống tập tin được cho là hỗ trợ (ở một mức độ nào) giống nhau cho tất cả mọi người (mở, đọc, viết, v.v.) vì vậy ngay từ cái nhìn đầu tiên, đây có vẻ là một khởi đầu dễ dàng (ngay cả khi được mã hóa bằng các kỹ thuật tiền xử lý C) altho bạn có thể muốn xem qua các thư viện C++ boost được cho là độc lập với nền tảng cao và cung cấp một số công cụ phát triển độc lập nền tảng tốt).

Chúc may mắn!

+0

Ngoài FUSE, Dokan, CBFS, còn có Pismo File Mount. PFM có thể được sử dụng để triển khai các hệ thống tệp gốc, ở chế độ người dùng, trên Mac, Windows và Linux. (Tiết lộ đầy đủ: Tôi là nhà phát triển PFM chính.) – Joe

1

Tôi sắp gặp phải các sự cố tương tự như của bạn: phát triển hệ thống tệp "đa nền tảng".

  1. Nếu bạn định phát triển hệ thống tệp gốc, tốt nhất bạn có thể làm là cô lập nhiều như thuật toán hệ thống tệp của bạn (tính toán bố cục đĩa, tổng kiểm tra, cấu trúc dữ liệu thư mục và v.v.) các API dành riêng cho os, thành ansi-c. Bạn có thể đọc qua mã ZFS, được coi là tốt bằng văn bản để nó tương đối dễ dàng để chuyển sang FreeBSD/Mac/Linux.
  2. Nếu không, nếu bạn có thể đáp ứng với chi phí hiệu suất của hệ thống tệp của người dùng, để duy trì hệ thống tệp trên Mac/Linux/BSD là không đáng kể. Sử dụng POSIX API, FUSE và thư viện của bên thứ ba có sẵn trên mỗi nền tảng, đó là những gì tôi đang làm bây giờ. Tuy nhiên đối với các cửa sổ, tôi đã nghe một triển khai FUSE, nhưng tôi không nghĩ rằng nó đã sẵn sàng cho sản xuất. Vì vậy, giống như phát triển hệ thống tệp gốc, hãy cố gắng đóng gói các tệp hệ thống của bạn trong ansi-c càng nhiều càng tốt.
Các vấn đề liên quan