2010-02-25 10 views
19

Nie jestem pewien, jaka może być "ogólna" nazwa czegoś podobnego. Szukam biblioteki, która daje mi format pliku do przechowywania różnych typów danych binarnych w rozszerzającym się pojedynczym pliku.Wbudowany system plików typu open source (lub system plików pojedynczego pliku lub pamięć strukturalna) dla C

  • open source, non-GPL (LGPL ok)
  • C interfejs
  • format pliku jest pojedynczy plik
  • wielu plików w użyciu POSIX-jak plik API (lub wielu "bąble" wewnątrz przy użyciu innego API)
  • plik/edycja struktura jest wykonywana w miejscu
  • niezawodny pierwszy, wydajnych sekund

Przykłady obejmują:

problemy z opisanymi powyżej:

  • whefs nie wydaje się być bardzo dojrzały, ale najlepiej opisuje to, co jestem po
  • HDF, CDF, netcdf są wykorzystywane (również bardzo niezawodny i szybki), ale są one dość skomplikowane i jestem nie do końca przekonani o ich poparcie dla nieprzezroczystych binarnych "bąble"

Edit:
Zapomniałem wspomnieć, jedno inne istotne pytanie:
Simple Virtual Filesystem in C/C++
Innym podobne pytanie:
Is there an open-source alternative to Windows compound files?

Edit:
Dodany stan edycji w miejscu.

Edit:
whefs zastąpione przez: whio_epfs

+0

ROOT (http://root.cern.ch/) implementuje taką rzecz w swoim formacie TFile, ale to jest C++. – dmckee

Odpowiedz

6

To wydaje się robić to, co szukałem: libgsf

jeszcze trzeba przetestować niezawodność/wydajność i jak wieloplatformowy format binarny jest.

+0

Czy to nie jest tylko dla archiwów takich jak gzip? Jaki rodzaj wirtualnego systemu plików obsługuje libgsf? –

+1

Obsługuje GZip, ale tutaj przypadek użycia był bardziej zgodny z tym formatem: http://msdn.microsoft.com/en-us/library/dd942138.aspx – Ioan

+0

Pojęty. Ostatnie pytanie: Co sądzisz o POLU? I czy libgsf w końcu tworzy taki kontener OLE o stałym rozmiarze? –

0

To brzmi jak mówisz, co pozwala traktować pliku w systemie plików jako urządzenia blokowego pierwszej klasy urządzenia loopback Linux (i następnie przystąpić do mkfs, montażu itp)

(Jakie platformy ty targetting? pełnofunkcjonalny Coś system uniksopodobny? osadzonym w przestrzeni o małej powierzchni?)

+0

Intencją jest platforma wieloplatformowa. Z pewnością Windows i wbudowana wersja systemu Linux. Zastanawiałem się nad urządzeniem loopback, ale nie wspomniałem o nim, ponieważ nie byłem pewien, czy może on rosnąć i nie będzie działał w systemie Windows. – Ioan

+0

Dobrze. Gdybym był w twoich butach, również brałbym pod uwagę różne systemy plików z logowaniem, aby sprawdzić, czy istnieje jeden z dopuszczalną licencją, którą możesz zhackować wystarczająco dobrze, aby pracować w przestrzeni użytkownika i pracować z plikiem jako magazyn zapasowy (w przeciwieństwie do urządzenia blokowego). – crazyscot

0

biblioteka wxWindows obsługuje plików ZIP (patrz http://docs.wxwidgets.org/stable/wx_wxarc.html#wxarc). Ma to również tę zaletę, że można przejrzeć zawartość za pomocą menedżera ZIP (np. WINZIP).

Handlowy alternatywą jest ChillKat (http://www.chilkatsoft.com/)

Jeżeli zabezpieczenie jest problemem, zaszyfrować zawartość pliku i magiel nazwy plików w archiwum ZIP.

+0

Bezpieczeństwo nie jest problemem. Nie zajrzałem zbytnio do normalnych typów archiwum, ale zastanawiam się, jak dobrze radzą sobie z dużymi zbiorami danych, dużą szybkością, przypadkowym dostępem do wewnętrznej zawartości plików i jednoczesnym czytnikiem/pisarzem ... – Ioan

0
+0

Fajny pomysł, ale jeszcze nie dojrzały. To zależy od Einy, która jest obecnie niestabilna. Ponadto, w zasadzie przechowuje on mapę mieszania "porcji", która wymaga dodatkowej warstwy do zarządzania nimi. – Ioan

+0

Format kontenera Ogg jest bardzo podobny do Eet w prostocie: http://www.xiph.org/ogg/doc/ – Ioan

0

Co BerkeleyDB? Nie jest to dokładnie system plików, ale jest dość przejrzysty, aby przechowywać "dane binarne" w pliku. Licencja wydaje się również dość permisywna.

+0

Według http://www.oracle.com/technology/software/products/berkeley-db /htdocs/licensing.html wymaga komercyjnej licencji na aplikacje o zamkniętym kodzie źródłowym. Nie wiem też, o ile jest szybszy niż SQLite, który był kilka razy wolniejszy niż przechowywanie bezpośrednio w pliku. To był prosty test, wsadowy commit do przechowywania danych. – Ioan

+0

Cóż, nie wspomniałeś, że robiłeś aplikację o zamkniętym źródle. I tak, może to być po prostu Ike SQLite, ale po kilku latach stabilizacji po stronie osadzonej. – lorenzog

+0

Przepraszamy, mój komentarz był mylący. Obecna licencja open source BerkeleyDB jest podobna do licencji GPL (ponieważ wymaga wydania całego źródła aplikacji), co narusza jedno z wymagań wymienionych w pytaniu. – Ioan

Powiązane problemy