2010-02-25 12 views
19

Ich bin mir nicht sicher, wie der "allgemeine" Name von so etwas sein könnte. Ich suche nach einer Bibliothek, die mir ein Dateiformat gibt, um verschiedene Arten von Binärdaten in einer expandierenden einzelnen Datei zu speichern.Open Source eingebettetes Dateisystem (oder einzelne Datei virtuelles Dateisystem oder strukturierter Speicher) für C

  • Open-Source-Nicht-GPL (LGPL ok)
  • C-Schnittstelle
  • das Dateiformat ist eine einzelne Datei
  • mehr Dateien innerhalb eines POSIX-like-Datei-API (oder mehr "Blobs" eine andere API innerhalb verwenden)
  • Datei/Struktur Bearbeitung in-place getan
  • zuverlässig ersten, performant zweiten

Beispiele hierfür sind:

Probleme mit dem oben:

  • whefs scheint nicht sehr ausgereift zu sein, aber am besten beschreibt, was ich nach
  • HDF, CDF, NetCDF verwendbar sind (auch sehr zuverlässig und schnell), aber sie sind ziemlich kompliziert, und ich bin nicht ganz überzeugt von ihrer Unterstützung für undurchsichtige binären "Blobs"

Edit:
vergessen, eine andere relevante Frage zu erwähnen:
Simple Virtual Filesystem in C/C++
eine weitere ähnliche Frage:
Is there an open-source alternative to Windows compound files?

Edit:
Added Zustand der in-Place-Bearbeitung.

Edit:
whefs ersetzt durch: whio_epfs

+0

ROOT (http://root.cern.ch/) implementiert so etwas im TFile-Format, aber das ist C++. – dmckee

Antwort

6

Dies scheint zu tun, was ich suchte: libgsf

Noch brauchen Zuverlässigkeit/Leistung zu testen und wie Cross-Plattform das Binärformat ist.

+0

Ist es nicht nur für Archive wie gzip? Welche Art von virtuellem Dateisystem unterstützt libgsf? –

+1

Es unterstützt GZip, aber der Anwendungsfall hier war mehr für die Unterstützung dieses Formats: http://msdn.microsoft.com/en-us/library/dd942138.aspx – Ioan

+0

Verstanden. Eine letzte Frage: Was denkst du über POLE? Und erstellt libgsf überhaupt einen solchen OLE-Container mit einer festen Größe? –

0

Es klingt wie Sie die Linux Loopbackdevice reden über, die Sie auf einem Dateisystem als First-Class-Block-Gerät behandeln eine Datei läßt (und geht dann mkfs montieren, etc.)

(Welche Art von Plattform Targeting Sie? ein voll ausgestattetes Unixoides System? Etwas im Embedded-Bereich mit geringen Platzbedarf?)

+0

Cross-Plattform ist die Absicht. Sicherlich Windows und eine Embedded-Linux-Version. Ich dachte über das Loopback-Gerät nach, erwähnte es aber nicht, weil ich nicht sicher war, ob es in der Größe wachsen könnte und unter Windows nicht funktioniert. – Ioan

+0

Rechts. Wenn ich in Ihren Schuhen wäre, dann würde ich auch in die verschiedenen Log-strukturierten Dateisysteme schauen, um zu sehen, ob es eine mit einer akzeptablen Lizenz gibt, die Sie gut genug hacken könnten, um im Benutzerland zu arbeiten und eine Datei abzuarbeiten Backing Store (im Gegensatz zu einem Block-Gerät). – crazyscot

0

die WxWindows Bibliothek unterstützt ZIP-Dateien (siehe http://docs.wxwidgets.org/stable/wx_wxarc.html#wxarc). Dies hat auch den Vorteil, dass Sie den Inhalt mit einem ZIP-Manager (z. B. WINZIP) betrachten können.

Eine kommerzielle Alternative ist ChillKat (http://www.chilkatsoft.com/)

Wenn Sicherheit ein Anliegen ist, den Inhalt der Datei verschlüsseln und die Dateinamen in dem ZIP-Archiv mangle.

+0

Sicherheit ist kein Problem. Ich habe mich nicht zu sehr mit normalen Archivtypen beschäftigt, aber ich frage mich, wie gut sie in Bezug auf große Datensätze, hohe Geschwindigkeit, wahlfreien Zugriff auf den Inhalt der internen Datei und gleichzeitiges Lesen/Schreiben ... sind. – Ioan

0
+0

Nette Idee, aber noch nicht reif. Es hängt von Eina ab, das momentan instabil ist. Außerdem speichert es im Grunde eine Hash-Karte von "Chunks", die eine zusätzliche Schicht benötigt, um sie zu verwalten. – Ioan

+0

Das Ogg-Containerformat ist Eet in der Einfachheit auch sehr ähnlich: http://www.xiph.org/ogg/doc/ – Ioan

0

Was BerkeleyDB? Es ist nicht genau ein Dateisystem, aber es ist ziemlich transparent, 'binäre Daten' in einer Datei zu speichern. Die Lizenz scheint ebenfalls ziemlich freizügig zu sein.

+0

Entsprechend http://www.oracle.com/technology/software/products/berkeley-db /htdocs/licensing.html erfordert es eine kommerzielle Lizenz für Closed-Source-Anwendungen. Außerdem weiß ich nicht, wie viel schneller es ist als SQLite, das ein paar Mal langsamer war als einfach direkt in einer Datei zu speichern. Dies war ein einfacher Test, Batch-Commit zum Speichern von Daten. – Ioan

+0

Nun, Sie haben nicht erwähnt, dass Sie eine Closed-Source-Anwendung ausgeführt haben. Und ja, es könnte nur SQLite sein, aber mit ein paar Jahren Stabilität auf der Embedded-Seite. – lorenzog

+0

Entschuldigung, mein Kommentar war irreführend. Die aktuelle BerkeleyDB-Open-Source-Lizenz ist GPL-ähnlich (wie es erfordert, dass Ihre gesamte Anwendungsquelle freigegeben wird), wodurch eine der in der Frage erwähnten Anforderungen verletzt wird. – Ioan

Verwandte Themen