2011-01-29 4 views
12

Quelles sont les technologies utilisées par les applications telles que Dropbox (http://www.dropbox.com/) et expandrive (http://www.expandrive.com/mac) pour Construire la fonctionnalité directement dans les systèmes de fichiers locaux sur chaque plate-forme? Quelqu'un peut-il suggérer quelque chose qui permettrait une réutilisation maximale du code sur toutes les plateformes majeures?Développement de "systèmes de fichiers" pour Linux, Mac, Windows

J'ai seulement regardé FUSE sur Linux jusqu'ici et j'aime ce que je vois.

+3

Le client dropbox ne met pas en fait un système de fichiers, il inspecte simplement les mises à jour et les fichiers existants. FUSE fait quelque chose de très différent. –

+0

Généralement, la réutilisation de code maximum est mieux réalisée grâce à une architecture bien pensée et la généralisation du problème. Et, bien sûr, la sélection d'un langage/cadre de programmation en cas de développement multi-plateforme. –

+0

Dans la boîte de dépôt ... En général, comment détectent-ils qu'un fichier a été modifié? Je ne veux vraiment pas entrer dans les détails de leur technologie, mais je suis curieux de savoir s'ils font simplement quelque chose de naïf, comme scanner des fichiers pour l'horodatage modifié ou quelque chose de plus sophistiqué tel que la mise en place d'une notification. modifié. Ce dernier cas serait plus intéressant et j'aimerais savoir si c'est même possible sur une plateforme donnée. – mcot

Répondre

5

La mise en œuvre d'un système de fichiers virtuel est très OS spécifique. La raison en est que l'architecture des pilotes est différente dans les OS Unix et Windows. Pour éviter d'écrire votre propre pilote, vous pouvez utiliser la boîte à outils du système de fichiers en mode utilisateur. Sur Linux, BSD et MacOS, il existe respectivement FUSE et OSXFUSE (fork de MacFUSE désormais inactif). Sur Windows, notre Callback File System est utilisé.

Dropbox pour le moment n'a pas de système de fichiers virtuel, mais seulement une extension shell (ils ont prévu de créer un disque virtuel, mais je ne sais pas ce qu'ils ont décidé).

En ce qui concerne le suivi des modifications de fichiers: il existe plusieurs méthodes. Le plus simple est de scanner le répertoire sur la minuterie et de comparer les horodatages et les tailles de fichiers. Ensuite, on peut utiliser la fonction WinAPI FindFirstChangeNotification. Et la méthode la plus sophistiquée et la plus fiable consiste à utiliser un pilote de filtre de système de fichiers. Sur Windows, notre CallbackFilter peut être utilisé. Sur MacOS X et Linux, vous pouvez obtenir des post-notifications similaires à celles proposées par FileSystemWatcher dans .NET/Windows. En particulier, sur Linux, on peut utiliser inotify.

3

Ce que vous recherchez sont les systèmes de fichiers usrspace. Je ne sais pas s'il y a une solution unifiée pour la mise en œuvre des systèmes de fichiers en espace utilisateur sur tous (ou presque tous) les plates-formes (probablement pas), mais voici un point de départ:

  • pour linux et (je pense que quelques-uns) unix: fusefs
  • pour les fenêtres: dokan
  • pour mac os: macfuse

Je ne suis pas au courant de tous, donc je ne sais pas combien il est facile de coder proxy/interfaces afin que vous puissiez en toute transparence implémenter des systèmes de fichiers dans une plate-forme indépendante manière ndent. Quoiqu'il en soit, les opérations qu'un système de fichiers est censé supporter sont (dans une certaine mesure) identiques pour tout le monde (ouvrir, lire, écrire, etc.) donc à première vue cela semble être un début facile (même si codé avec des techniques de prétraitement C, Bien sûr, vous voudrez peut-être jeter un coup d'œil aux bibliothèques C++ boost qui sont supposées être très indépendantes de la plate-forme et qui offrent également de bons outils de développement indépendants de la plate-forme).

Bonne chance!

+0

En plus de FUSE, Dokan, CBFS, il y a Pismo File Mount. PFM peut être utilisé pour implémenter des systèmes de fichiers natifs, en mode utilisateur, sur Mac, Windows et Linux. (Divulgation complète: je suis le développeur PFM primaire.) – Joe

1

Je rencontre en quelque sorte des problèmes similaires aux vôtres: développer des systèmes de fichiers «multiplateformes».

  1. Si vous allez développer un système de fichier natif, le mieux que vous pouvez faire est d'essayer d'isoler autant que vos algorithmes de système de fichiers (calcul disque mise en page, checksums, structures de données de l'annuaire et etc.), en plus les APIs spécifiques à l'os, en ansi-c. Vous pouvez lire le code ZFS, qui est considéré comme bien écrit, de sorte qu'il est relativement facile de le porter sur FreeBSD/Mac/Linux.
  2. Sinon, si vous pouvez satisfaire aux coûts de performance des systèmes de fichiers user-land, maintenir un système de fichiers sur Mac/Linux/BSD est trivial. Utiliser l'API POSIX, FUSE et les bibliothèques tierces disponibles sur chaque plate-forme, ce que je fais maintenant. Cependant, pour Windows, j'ai entendu une implémentation de FUSE, mais je ne pense pas qu'elle soit prête pour la production. Donc, tout comme le développement de systèmes de fichiers natifs, essayez d'encapsuler autant que possible les logiques de votre système de fichiers dans ansi-c.
Questions connexes