Virtuální souborový systém   otázka

Offtopic

Dobrý den,

obracím se zde s prosbou o radu. Předem bych chtěl podotknout, že nežádám po nikom celé vyřešení mého problému, neboť vím, že to by nikdo neudělal a hlavně vím, že "domácí úkoly" tady nikdo neřeší.

Mým cílem je vytvořit virtuální souborový systém (VSS), jinak řečeno systém, který bude pouze v paměti, nikoliv na HDD. Měl by rozeznávat několik základních přikazů, jako třeba mf, md apodobně.

Pravděpodobně bude nutné použít nějakou datovou strukturu strom, kde podle mého názoru kořeny stromu budou reprezentovat složky a listy budou soubory. Problém je v tom, že nevím jaký strom použít (například binární zcela jistě ne). Další funkce VVS už se pokusím implementovat sám. Neprosím tedy o žádný kód, spíše o logickou radu, jak tento problém řešit.

Pokud by později někdo měl zájem, jsem ochoten mu poskytnout kód VSS v jazyce C++. Předem děkuji za všechny náměty a rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží hodně na tom, co přesně má souborý systém dělat a na co je kladen důraz.

Nejzákladnější verzí bude jednoduchý objekt složky. Ta bude obsahovat 2 vlastnosti. Za prvé seznam objektů také typu složky (seznam podsložek) a seznam objektů typu soubor (soubory uvnitř složky).

Třída souboru ponese krom jména i pole bytů reprezentující obsah.

Pokud by to celé mělo být robustnější, byla by potřeba přidat nějaké řízené kolekce (například, aby nebyly 2 soubory se stejným jménem v jedné složce) a nějaký synchornizační kontext (tedy řízení přístupu k souborům). Dále můžete chtít nějaké oprávněné, kvóty, virtuální adresáře, indexaci atp. Vše implementovat lze, ale musíte vědět, na co budete systém používat. Rozhodně bych pak doporučil nějaké objekty pro řízení přístupu k těmto "souborům" pomocí textové cesty. Na něj se pak dá navázat například konzole s příkazy. Pokud budete chtít experimentovat, lze celý systém přivázat do powershellu jako provider struktury.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Zajímalo by mne, jak chcete takovou věc udělat. Pokud to má být dostupné v systému jako kterýkoliv jiný disk, budete muset napsat ovladač virtuálního disku a při vší úctě pochybuji, že byste to zvládl...

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Jsem také zvědavý, jestli to má být systémově integrované nebo jen něco pro potřeby aplikace tazatele. A také jaký je k tomu důvod.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na otázku k čemu je to dobré, je odpověď snadná - k ničemu. Nicméně udělat to musím, jde o zadání semestrálního projektu. Nějaké smysluplné využití této aplikace asi není. Ještě tedy k upřsnění zadání:

- v adresáři nemohou existovat položky s duplicitním jménem (soubory a adresáře)

- každý adresář obsahuje 2 virtuální položky: . odkazuje na sebe sama a .. odkazuje na nadřazený adresář, tyto položky se nevypisují, ale slouží pouze pro relativní adresování v příkazech

- všechny výpisy jsou seřazeny podle typu položky (adresáře před soubory) a abecedního uspořádání

- v relativních cestách lze použít jaj již zmíněné symboly . a .. ale také symbol /, který značí přesun do kořenové složky

Zdá se mi to jako poměrně zajímavá úloha, ale určitě mě teď čeká několik probdělých nocí nad C++....

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě doplnění: celý systém má být pouze v paměti, to znamená, že po ukončení programu bude veškeré vytvořené soubory a složky smazány. To dost usnadňuje celý problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máme to tedy chápat tak, že to bude konzolová aplikace, ve které se budou zadávat pseudopříkazy MD, COPY, atd. a v paměti se bude pouze vytvářet jakási struktura?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, přesně tak. Omlouvám se za zezačátku trochu nepochopitelné zadání.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, zkuste se podívat, jak fungují stávající souborové systémy a udělejte to podle toho. Máte to o dost lehčí, protože nemusíte řešit co nejmenší skákání v paměti (na disku je seek v řádku milisekund, v paměti je to oproti tomu zanedbatelné) a žurnálování (když něco zapíšu, musí se to zapsat celé, anebo se musí poznat, že se to celé nezapsalo např. kvůli výpadku proudu).

Doporučuji třeba mrknout, jak funguje úplně nejjednodušší FAT.

Jinak na strom souborů bych řekl, že stačí objekt, který uchovává mimo jiné seznam svých přímých potomků. Ale záleží na zadání, souborové systémy většinou používají B-stromy nebo nějaké jejich varianty, takže nevím, jestli třeba dle zadání nemáte naimplementovat ten.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky moc za rady. V zadání právě o žádném stromu nebyla řeč a taky se pomalu začínám příklánět k variantě B-stromu. Zatím jsem si připřavil třídy Adresar a Soubor, napsal jejich metody a napsal funkci pro čtení vstupního příkazu, co se zhruba udělat. Ten už vlastně zbývá to nejdůležitější - naimplementovat strom a popřípadě dodělat detaily.

Snad nakonec celý problém nebude tak zlý, jak jsem si po prvním přečtení zadání myslel. Ještě jednou díky.

Pokud by někdo měl zájem, klidně budu informovat, jak jsem problém vyřešil, nicméně si nemyslím, že by asi někoho zajímala taková v podstatě zbytečná věc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém je to zajímavý. Co zdrojové kódy někam vystavit veřejně, pokud to bude možné? Dejte vědet, až to bude hotové! Je to určitě zajímavý problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Termín odevzdání mám do 14. května, takže pokud to úspěšně udělám, nebude z mé strany problém poté zdrojové kódy někde zveřejnit. Jen připomínám, bude to v jazyce C++.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě mám jeden malý skromný dotaz. V zadání jsem si všiml, že souborový systém má mít "hierarchickou strukturu". Pátral jsem na internetu, co to vlastně je, ale uspokojivou odpověď jsem nenašel. Proto se ještě obracím na Vás a omlouvám se, že jsem tak otravný. :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Znamená to stromovou strukturu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha, takže pouze to říká abych použil stromovou strukturu. Hodně by mi pomohlo, kdyby se v zadání přímo řeklo, jaký strom použít. Rozhodnout se ale budu muset sám, snad varianta B-stromu bude správná.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj predpokladam, ze je to zadani od J.Dvorskeho mam ten samy projekt a taky si snim pomerne lamu hlavu pokud mas zajem napis mi na ICQ 333-361-670 rad bych s nekym konzultoval postupy a mozna reseni.

Sam jsem uvazoval nad tim, ci to neudelat tak, ze kazdy adresar bude mit svuj vlastni index a index adresare nad nim a pomoci tohoto by se ve stromove strukture dalo vyhledavat. Je to jen prvotni napad.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj, taky mam to stejne zadani od Dvorskeho:)

prosim napis mi na icq: 332-653-690

Budu se snazit na tom delat, a jak budu vedet tak poradim...ikdyz momentalne ani moc nevim jak zacit:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro pana T. Jechu: Zdravím, tak se mi nakonec povedlo úspěšně dokončit ten virtuální souborový systém. Nebylo to nakonec vlastně ani moc těžké, jak se mi na první pohled zdálo. Říkal jste, ať dám vědět, jakmile to dokončím, takže tedy dávám vědět.

Podělit se o zdrojové kódy, pokud je zájem, není žádný problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Byl jsem za p.Dvorskym a ptal jsem se ho jakym spusobem be se to melo delat rikal ze v zadnem pripade to neni B-strom, a ze se program resi pomoci navrhoveho vzoru Kompozice. A ta struktura toho adresare by mela byt takova, ze Adresar bude mit svoje jmeno a podobne a take bude mit ulozeny seznam vsech podadresaru a souboru v nem. Jen nevim pomoci jake datove struktury tento seznam udelat nejvhodnejsi by bylo nejspis pole, ale nevim jak za behu programu neustale pole obnovovat. ([email protected])

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Tak pokud víte jaký návrhový vzor použít,tak snad není problém to poté udělat.Návrhový vzor Composite využívá buďto abstrakní třídy jako rodiče všech datových podtypů nebo se programuje proti rozhraní,záleží co je v tu chvíli výhodnější :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím, mám stejné zadání a já jako "programátor" si s tím nevím rady ... Zkoušel jsem to nějak takto: Udělal jsem si objekt systém, ten má metody pro jednotlivé příkazy. Pak jsem si udělal další objekt Console, která bude získávat od uživatele ty příkazy. Object Console bude předávat příkazy Objectu System, který ty příkazy bude vykonávat. Object System bude mít napojení na VSS (tj.objektový strom). Tak nějak jsem to domyslel a pochopil, bohužel to nedokážu naprogramovat, něco ano ale je to jen malé minimum, takže se chci zeptat, jestli to už někdo třeba nemá ?? Samozřejmě si to celé překopu podle svého ... Tady je mé ICQ: 370-760-501

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback