Prihlásenie Registrácia  

B - Bod pripojenia

Časový limit: 2s, Pamäťový limit: 64MiB

Programovacie jazyky: Pascal, C, C++, Java, C++0x, Python 3

Počet bodov: 1

[ Pošli riešenie ] [ Tvoje riešenia ] [ Správne riešenia ] [ Vzorové riešenie ]

Vo svete Unixu nie sú partície označené písmenami, ale sú zapojené niekam do stromovej štruktúry. Tá začína koreňom označeným ako lomka (znak /). Každý prvok v tejto štruktúre môže mať svojich ďalších potomkov. Napríklad cesty k prvkom x a y umiestneným v koreni zpíšeme ako /x a /y. Ak by mal prvok y potomka z, cesta by vyzerala ako /y/z.

Jednotlivé partície sa pripájajú (mountujú) na nejakú cestu (bod pripojenia). Najbežnejšie príklady sú /home, /var, /usr, /var/spool a podobne. Aby bolo možné nejakú partíciu pripojiť, musí zadané prípojné miesto už existovať. To sa ale nachádza na nejakej partícií, ktorá už v tom čase musí byť pripojená. Ak by sme chceli napríklad pripojiť partíciu A do /var a partíciu B do /var/spool, musela by byť prvá pripojená partícia A, a až následne partícia B. V opačnom poradí ich nie je možné pripojiť. Následne by sme mohli pripojiť ďalšiu partíciu napríklad aj do /var/spool/a/b/c (nie však do /var ani /var/spool).

Máme inštalátor, ktorý dostal údaje vo forme klasického /etc/fstab súboru, ako je napríklad tento:
UUID=0915-1BB0 /media/data vfat defaults 1 2
/dev/main/root / ext4 relatime 1 1
/dev/main/varspool /var/spool ext4 relatime,nodev,nosuid,noexec 1 2
/dev/md0 /boot ext4 relatime,nodev,nosuid,noexec 1 2
/dev/md2 /home/data ext4 relatime,nodev,nosuid,noexec 1 2
/dev/main/home /home ext4 relatime,nodev,nosuid,noexec 1 2
/dev/main/opt /opt ext4 relatime,nodev,nosuid 1 2
/dev/main/temp /tmp ext4 relatime,nodev,nosuid,noexec 1 2
/dev/main/usr /usr ext4 relatime 1 2
/dev/main/var /var ext4 relatime,nodev,nosuid,noexec 1 2
Súbor /etc/fstab obsahuje na každom riadku 6 hodnôt oddelených medzerou. Prvá hodnota udáva názov fyzického disku definovaný operačným systémom. Druhá hodnota je prípojné miesto v stromovej štruktúre, tretia typ súborového systému, štvrtá definuje rôzne nastavenia pre súborový systém oddelené čiarkou. Piata hodnota je číslo, ktoré určuje, či sa ma daná partícia zálohovať programom dump. Šiesta hodnota je opäť číslo a udáva poradie, v ktorom sa vykonáva kontrola súborového systému. Žiadna z týchto hodnôt nesmie obsahovať biele znaky.

Úloha

Vašou úlohou bude napísať program, ktorý pri štarte systému pripojí všetky partície. Musíte rozhodnúť, v akom poradí je potrebné partície pripájať. Ak sa na výstupe nachádza nejaká skupina partícií, ktorých poradie nie je jednoznačne určené, vypíšte ich v takom poradí, aby partícia, ktorá sa na vstupe nachádza ako prvá, bola pripojená najskôr, ako je to možné.

Vstup

Štandardný vstup obsahuje najviac sto riadkov, ktoré predstavujú validný súbor /etc/fstab. Ako oddeľovač jednotlivých položiek používa vždy práve jednu medzeru. Ďalej predpokladajte, že jednotlivé položky obsahujú znaky ASCII tabuľky medzi 33 a 126 a každá z nich obsahuje maximálne 100 znakov. Každé prípojné miesto bude začínať znakom / a práve jeden riadok obsahovať prípojné miesto pre koreňový adresár /. Prípojné miesto môže, ale nemusí končiť znakom /.

Výstup

Na štandardný výstup vypíšte na jednotlivých riadkoch partície v poradí, v akom sa majú pripojiť. Riadok musí obsahovať tri hodnoty oddelené medzerou. Prvá je príkaz mount, druhá názov fyzického disku a tretia prípojné miesto. Názov disku aj prípojné miesto musia byť presne v tej forme, ako boli uvedené vo vstupnom súbore (je potrebné dodržať aj to, či cesta končila lomkou alebo nie). Takýto výstup je možné predať priamo unixovému príkazovému riadku, ktorý jednotlivé riadky vykoná a partície pripojí.

Príklad

Vstup:

UUID=592E-1BB0 /media/data vfat defaults 1 2
/dev/main/root / ext4 relatime 1 1
/dev/main/varspool /var/spool ext4 relatime,nodev,nosuid,noexec 1 2
/dev/md0 /boot ext4 relatime,nodev,nosuid,noexec 1 2
/dev/md2 /home/data ext4 relatime,nodev,nosuid,noexec 1 2
/dev/main/home /home ext4 relatime,nodev,nosuid,noexec 1 2
/dev/main/opt /opt ext4 relatime,nodev,nosuid 1 2
/dev/main/temp /tmp ext4 relatime,nodev,nosuid,noexec 1 2
/dev/main/usr /usr ext4 relatime 1 2
/dev/main/var /var ext4 relatime,nodev,nosuid,noexec 1 2

Výstup:

mount /dev/main/root /
mount UUID=592E-1BB0 /media/data
mount /dev/main/var /var
mount /dev/main/varspool /var/spool
mount /dev/md0 /boot
mount /dev/main/home /home
mount /dev/md2 /home/data
mount /dev/main/opt /opt
mount /dev/main/temp /tmp
mount /dev/main/usr /usr
Vysvetlenie:
Najprv musíme pripojiť koreň, teda /dev/main/root do /.
Následne pripojíme UUID=592E-1BB0 do /media/data, pretože to bol prvý riadok vo vstupe.
Potom pripojíme partíciu do /var a ďalšiu do /var/spool, aby sme dodržali správne poradie pripájania.
Nasleduje pripojenie /dev/md0 do /boot, pretože vo vstupe nasleduje po riadku s cestou /var/varspool.
V správnom poradí pripojíme aj partície do /home a /home/data.
Nakoniec nasledujú zvyšné, na sebe nezávislé partície v poradí, v akom boli na vstupe.