Zkouška 1.6.

Seznámení se základními principy operačního systému UNIX, převážně z uživatelského hlediska. Absolvent kurzu by měl být schopen napsat netriviální program v shellu.
Uživatelský avatar
Ellrohir
Matfyz(ák|ačka) level III
Příspěvky: 140
Registrován: 21. 12. 2007 13:29
Typ studia: Informatika Bc.
Bydliště: Praha
Kontaktovat uživatele:

Zkouška 1.6.

Příspěvek od Ellrohir »

Dnes byl zase jeden z "nových" příkladů:

Úkolem bylo napsat program simulující "ls -l" a podporující libovolnou kombinaci optionů -aAdrRt (od příkazu "ls")

samozřejmě bez použití "ls"...zato byl představen příkaz "stat" (který v podstatě vypíše o souboru skoro totéž co "ls -l", jeho jediný povolený option byl -t (nastavení formátu výpisu času - protože defaultně ho vypisuje s mezerami, což by mohlo dělat bordel v následném zpracování) a "readlink" (pro zjištění, kam ukazuje symlink - pokud je soubor symlink)


úspěšnost byla zhruba dvou třetinová...já nebyl mezi úspěšnými, ale upřímně řečeno, cítím se trochu "ošizen"...neříkám, že tam třeba nebylo něco vyloženě špatného, ale pakliže je má písemka odmítnuta se slovy "mě se to nelíbí, je to takové moc těžkopádné a nedotažené"...kdyby mi bylo řečeno například "takhle to nejde, awk neumí třídit lexikograficky (pořád nevím, jestli umí nebo ne), takže vám to nebude dělat, co chcete...měl jste použít příkaz sort", to bych třeba bral spíš...a přijde mi, že jsem tam toho celkem dost měl a všechno špatně nebylo...ale holt nestačilo to, ani nedošlo na diskusi...
Uživatelský avatar
tomasslavicek
Matfyz(ák|ačka) level I
Příspěvky: 8
Registrován: 4. 6. 2009 19:03
Typ studia: Informatika Bc.

Re: Zkouška 1.6.

Příspěvek od tomasslavicek »

Jen bych doplnil nějaké informace k této úloze:

Úkolem bylo napsat skript my_ls, který simuluje dlouhý výpis ls (jako ls -l). Přepínače byly:
-a ...vypsat i skryté soubory
-A ...vypsat i skryté, kromě . a ..
-d ...zanořovat se jen do hloubky 0 (nelézt do podsložek), výchozí hodnota zanoření byla 1
-R ...skript se bude zanořovat do celého podstromu. Bylo jedno, zda to budem brát do šířky, nebo do hloubky. Nemuseli jsme psát řádek "total: n".
-r ...vypsat každou složku v obráceném pořadí
-t ...netřídit výpis podle názvu souborů, ale podle času

Zároveň byly vylučující se přepínače -d/-R a myslím -a/-A. Dále se měl vypsat datum ve formátu "Jan 1 1970" pro soubory starší 6 měsíců a "May 17 18:06" pro soubory novější. Pokud nebyla skriptu zadána cesta, bral aktuální adresář. Pokud byl soubor symlink, na konec řádku se připojila šipka a název souboru, kam ukazoval.

Úloha byla opravdu jen o správném naparsování výpisu statu, všechny informace jsme vlastně měli k dispozici. Šlo o to nezamotat se do toho a nijak si to nezkomplikovat, aby se to dalo stihnout. Statu jsme vlastně mohli předat formát data tak, abychom dostali počet milisekund od začátku epochy (pro třídění) i oba formáty výpisu data na jeden řádek. Na konci už bychom jen vybrali jeden z nich, nemělo cenu převádět 3 na "Bře", nějak šíleně porovnávat čísla dní apod. Já jsem také nebyl úspěšný, ideu jsem měl správnou, ale krom pár dalších chybek jsem to nestihnul celé dopsat v kódu.

Mimochodem, zkoušel jste si někdo ten příkaz stat -t na reálném stroji? Pořád mi nebere ten zadaný formát data. Navíc i ten výpis mi připadá nějaký jiný, než byl uveden při zadávání úlohy (jinak zobrazená práva apod.). Doufám, že to nebyla jen umělá úloha, rád bych si ji skutečně doprogramoval.
Odpovědět

Zpět na „SWI095 Úvod do UNIXu“