2011-01-29 41 views
12

Qué tecnologías utilizan las aplicaciones como dropbox (http://www.dropbox.com/) y expandir (http://www.expandrive.com/mac) para crear funcionalidad directamente en los sistemas de archivos locales en cada plataforma? ¿Alguien puede sugerir algo que permita la reutilización máxima del código en todas las plataformas principales?Desarrollo de "Sistemas de archivos" para linux, mac, windows

Solo he mirado FUSE en Linux hasta el momento y me gusta lo que veo.

+3

El cliente de Dropbox en realidad no implementar un sistema de archivos, simplemente inspecciona y actualizaciones de archivos existentes. FUSE hace algo muy diferente. –

+0

En general, la máxima reutilización del código se logra mejor a través de una arquitectura bien pensada y la generalización del problema. Y, por supuesto, la selección de un lenguaje/marco de programación en caso de desarrollo multiplataforma. –

+0

En el caso de dropbox ... En general, ¿cómo están detectando que un archivo ha sido modificado? Realmente no quiero entrar en detalles de su tecnología, pero tengo curiosidad si simplemente están haciendo algo ingenuo, como escanear archivos para la marca de tiempo modificada o algo más sofisticado, como la implementación de algún tipo de notificación/devolución de llamada cuando un archivo es modificado. El último caso sería más interesante y me gustaría saber si es posible incluso en una plataforma determinada. – mcot

Respuesta

5

La implementación de un sistema de archivos virtual es muy operativo específico. La razón es que la arquitectura de los controladores es diferente en el sistema operativo tipo Unix y en Windows.

Para evitar escribir su propio controlador, puede utilizar el kit de herramientas del sistema de archivos en modo de usuario. En Linux, BSD y MacOS existen FUSE y OSXFUSE (fork de MacFUSE ahora inactivo) respectivamente. En Windows, se usa nuestro Callback File System.

Dropbox por el momento no tiene un sistema de archivos virtual, pero solo la extensión del shell (afaik planearon crear un disco virtual, pero no sé lo que han decidido).

Respecto a cómo se rastrean los cambios de archivos: existen varios métodos. Lo más simple es escanear el directorio en el temporizador y comparar las marcas de tiempo y los tamaños de archivo. A continuación, uno puede usar la función WinAPI FindFirstChangeNotification. Y el método más sofisticado y más confiable es usar un controlador de filtro del sistema de archivos. En Windows, puede usarse nuestro CallbackFilter. En MacOS X y Linux, puede recibir notificaciones posteriores similares a las que FileSystemWatcher ofrece en .NET/Windows. En particular, en Linux, uno puede usar inotify.

3

Lo que está buscando son los sistemas de archivos usrspace. No sé si hay una solución unificada para la implementación de sistemas de archivos en espacio de usuario en todos (o la mayoría de todos) Plataformas (probablemente no), pero aquí es un punto de partida:

  • para Linux y (creo que sólo algunos) unices: fusefs
  • para las ventanas: dokan
  • para el sistema operativo Mac: macfuse

no estoy familiarizado con todos ellos, así que no sé qué fácil es codificar proxies/interfaces de modo que pueda sin problemas implementar sistemas de archivos en una plataforma independiente ndent manera. De todos modos, las operaciones que se supone que debe soportar un sistema de archivos son (en cierta medida) iguales para todos (abrir, leer, escribir, etc.), por lo que a primera vista parece ser un comienzo fácil (incluso si está codificado con técnicas de preprocesamiento C, aunque es posible que desee echar un vistazo a las bibliotecas C++ boost que se supone que son altamente independientes de la plataforma y ofrecen algunas buenas herramientas de desarrollo independientes de la plataforma también).

¡Buena suerte!

+0

Además de FUSE, Dokan, CBFS, existe Pismo File Mount. PFM se puede utilizar para implementar sistemas de archivos nativos, en modo de usuario, en Mac, Windows y Linux. (Descripción completa: soy el desarrollador principal de PFM). – Joe

1

Tengo una especie de problema similar al tuyo: desarrollo de sistemas de archivos "multiplataforma".

  1. Si se va a desarrollar un sistema de archivos nativo, lo mejor que puede hacer es tratar de aislar tanto como sus algoritmos del sistema de archivos (calculando disco diseño, sumas de control, estructuras de datos y directorio etc.), además de las API específicas del os, en ansi-c. Puede leer a través del código ZFS, que se considera bien escrito, de modo que es relativamente fácil transferirlo a FreeBSD/Mac/Linux.
  2. De lo contrario, si puede satisfacer los costos de rendimiento de los sistemas de archivos de usuario-tierra, mantener un sistema de archivos en Mac/Linux/BSD es trivial. Utilizando API POSIX, FUSE y bibliotecas de terceros disponibles en cada plataforma, que es lo que estoy haciendo ahora. Sin embargo, para Windows, escuché una implementación de FUSE, pero no creo que esté lista para producción. Entonces, al igual que desarrollar un sistema de archivos nativo, intente encapsular la lógica de su sistema de archivos en ansi-c tanto como sea posible.
Cuestiones relacionadas