🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217335

Przenośny, uproszczony filesystem

#217335
From: heby
Date: Thu, 14 Jan 2021 12:31
80 lines
3956 bytes
Cześć.

Poszukuje inspiracji a być może gotowca. Ale to trudno powiedzieć. A 
chodzi o coś takiego:

Implementacja abstrkacyjnego filesystemu pracującego na urzeniau 
blokowym, do którego dostęp zapewniam ja, przez stosowane abstrkacje. 
Wykorzystać było by fajnie, ale najważniejsze to możliwośc podejrzenia 
rozwiązań.

Wiec to tak powinno wyglądać:

struct IFooFileSystem
{
	std::shared_ptr< IFile > openFile( std::string cosnt& _fileName, Flags 
_flags );

	bool fileExist( std::string const& _fileName );

	[...]
};

struct IBlockDevice
{
	std::shared_ptr< Block > readBlock( BlockIndes _index );

	void writeBlock( BlockIndes _index, Block& _block );
};

struct IFile
{
	void read(...);
	void seek(...);
	[...]
}

std::shared_ptr< IFooFileSystem >
createFileSystem( myBlockDevice );

Coś w ten deseń, czyli to ja dostaczam abstrakcje robiącą I/O na 
poziomie block/cluster a kod realizuje wysokopoziomowe operacje plikowe.

To nie musi być z czymkolwiek kompatybilne, nawet lepiej gdyby nie było. 
Musi być natomist komplenie nie zależne od czegokolwiek, czy to systemu 
czy zewnatrznych biblitek. I thread safe, będę jednoczesnie czytał i 
zapisywał wiele "plików" z róznych wątków. W zasadzie poza "plikami" 
reszta kompletnie zbędna, nie interesują mnie atrybuty czy nawet 
katalogi. Mocno uproszczony filesystem, coś w rodzaju wielu niezależnych 
strumieni w jednym kontenerze.

Mogę to napisać samodzielnie, ale zanim to zrobie: ktoś widział taki 
projekt lub część jakiegoś projektu?

Dla zastanawiajacych się po co mi to:

Jest *prawdziwy* plik. W moim kodzie jest konwertowany do urządzenia 
blokowego i wystawiany do tego mechanizmu fiesystemu.

Dzięki temu mogę w jednym pliku trzymac w środku wiele plików, 
bezustannie je czytajac i zmieniając. Ułatwi mi to pracę, ponieważ pliki 
te są trzymane razem, user nie może nic w nich popsuć, nie muszę 
bezustannie pakować/rozpakować jak robi np. OpenOffice (u nich 
kontenerem jest packer). Od razu gotowe do pracy.

Katalog odpada: user może w nim coś popsuć.

Ewentualne puchnięcie moża jakoś obejśc pisząc garbage collector 
trimujący ten "wirtualny filesystem" i przenoszący bloki w tle.

Coś podobnego robi np. VirtualBox ale nie chodzi o taki poziom emulacji 
dysków, to ma byc mała pierdoła do kodu który mam pod kontrolą.

Innymi słowy: czy ktoś widział tego typu wirtualny filesystem? 
Interesują mnie zagadnienia takie jak uproszczony wielodostęp czy 
realizacja kroniki. Chciałbym je poderzeć, ponieważ nie mam w tym 
doswiadczenia, pewnie napiszę to mało optymalnie.

Projekt Fuse nie nadaje się bez bardzo poważnego wrapowania. Ponadto ja 
nie potrzebuje wielu filesystemów, potrzebuje tylko jeden, o mało ważnej 
kompatybilności ze światem zewnętrznym. Taki FooFS.
Technical Details
Message-ID: <rtpdik$cge$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!news.uzoreto.com!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!news.uzoreto.com!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: heby <heby@poczta.onet.pl>
Newsgroups: pl.comp.programming
Subject: Przenośny, uproszczony filesystem
Date: Thu, 14 Jan 2021 13:31:15 +0100
Organization: A noiseless patient Spider
Lines: 80
Message-ID: <rtpdik$cge$1@dont-email.me>
Mime-Version: 1.0
Injection-Date: Thu, 14 Jan 2021 12:31:16 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="a0754113d6a558cd37a6112f9a477e51"; logging-data="12814"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+0OEY1hnKVsvxS0CMxOJUt"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1
Cancel-Lock: sha1:id5NQdi6NXt5ga8FIT+tvpG7K9E=
X-Mozilla-News-Host: news://news.eternal-september.org:119
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit