Programování v Unixu - cvičení pro mou skupinu

MFF UK, zimní semestr 2007/2008
Středa 10:40-12:10 v SU2 (Malá Strana)

Materiály

Různé příklady ze cvičení a zadání na doma. Rozvrh skupin a přihlašování do nich je ve školním informačním systému.

Zápočty

Zadání

Nutnou a postačující podmínkou pro udělení zápočtu je vytvoření a odevzdání zápočtového programu. Vy mi pošlete specifikaci programu který hodláte napsat a po případné další komunikaci a po té, co bude mnou schválena (nebo taky ne) je toto zadání vašeho zápočtu. Zápočtový program musí být napsán v jazyce C (preferováno) nebo C++ a musí obsahovat netriviální použití služeb UNIXu z alespoň dvou následujících oblastí:

Podmínka použití služeb UNIXu je splněna, pouze když je příslušná služba použita přímo, ne prostřednictvím další nadstavbové knihovny. Můžete tedy sice používat fopen(), fread() nebo fprintf() (knihovna stdio), ale jako použití souborových operací se vám počítají pouze funkce typu open(), read(), write() atd.

Podmínky pro vypracování

  1. ošetřujte chyby a rozumně reagujte na nesprávný vstup.
  2. zdroják zápočtového programu musí být vhodně rozdělen do více souborů a kompilace řízena pomocí programu make a netriviálního Makefile (oddělený překlad a linkování, správné závislosti, použití maker, překladač gcc musí používat -Wall, překladač cc (tj. například Solaris) pak -v).
  3. překlad vašeho kódu musí proběhnout bez varování.
  4. součástí zápočtového programu je i uživatelská a technická dokumentace ve formátu běžně čitelném v UNIXu, což není MS Word, RTF a jim podobné. Ideální uživatelská dokumentace je styl manuálové stránky. Nechci po vás romány, ale rád bych věděl, jak to mám spustit, co to všechno umí, určitě nějaké příklady použití, zhruba jak je to vnitřně implementováno apod.
  5. pokud se se mnou nedohodnete jinak, musí být zápočtový program přeložitelný a fungovat v UNIXové laboratoři, a to alespoň na dvou systémech - tedy například na Linuxu a na Solarisu (u-us), případně IRIXu (kappa), FreeBSD (pokud máte konto třeba na mail.kolej) atd. Linuxová emulace pod jiným systémem se nepočítá.
  6. pokud použijete již existujicí kód je to OK, ale musíte to mít ve specifikaci a v technické dokumentaci pak napsat co přesně jste převzali. Dodržujte copyright převzatého kódu.
  7. váš kód musí mít jednotnou úpravu pomocí cstyle (tedy není samozřejmě nutné a ani rozumné přepisovat kód, který jste použili cizí -- předpokládám, že v takové situaci bude cizí kódu v samostatném souboru)

Pro kontrolu zápočtů mám k dispozici Solaris, FreeBSD, OpenBSD, Linux a IRIX. Jiný systém dohodneme individuálně.

Zápočty od jiných cvičících jsem ochotný řešit pouze při dlouhodobé nepřítomnosti cvičícího.

Předání

Můžete mi zápočet poslat mailem, ale některé věci bych mohl chtít osobně. Když váš program rozbalím, tak mi to vytvoří adresář, ne že se mi vaše soubory slijí do aktuálního adresáře. Mail musí obsahovat vše potřebné, včetně zdrojáků, dokumentace, příkladů použití kde to dává smysl, specifikace daných dvou zvolených oblastí a na jakých systémech jste to otestovali. Tj. pokud budete dělat například make, tak potřebuju příklady použití - ve vlastním adresáři pár zdrojáků, příslušný Makefile ukazující vše co daný make umí, dále příklad který ukáže jak si poradí s chybným zadáním, různé příklady na zadání přepínačů příkazové řádky atd. Čím lépe mi to předložíte, tím jednodušší by mělo být udělení zápočtu.

Váš program by měl při špatném zadání přepínačů vypsat krátký help s krátkým popisem všech přepínačů, které je možné použít.

Počítejte prosím s tím, že na prohlédnutí vašeho zápočtového příkladu potřebuji alespoň 2-3 dny, velmi pravděpodobně nebude fungovat to, že mi večer před zkouškou pošlete váš zápočťák. Každopádně doporučuji odevzdat vaši práci alespoň týden předem, ať máte čas na opravu v případě problémů.

Náměty na zápočtové programy

Neakceptuju zadání typu klasický talk, lodě, piškvorky a jim podobné blbosti. Rozhodující je pak specifikace programu, na které se se mnou dohodnete. Neni potreba v zapoctaku resit velke veci, dulezite je, aby to co odevzdate bylo ucelene a dobre odladene.

  1. preferuji vlastní zadání, případně variaci na následující zadání, ideálně aby to bylo použitelné v praxi. Může to být i rozšíření existující aplikace o vhodné funkce.
  2. jednoduchý shell
    spouštění příkazů s parametry, přesměrování, roury, nastavení prostředí procesů, nastavení a použití proměnných (stačí VAR=value a $VAR), expanzní znaky, interní příkaz cd, skripty (posloupnost příkazů v souboru, bez řídicích konstrukcí), případně job control atd. Je možné vzít i jen nějakou podmnožinu, např. pokud chcete dělat job control, není potřeba dělat vše ostatní apod.
  3. tar
    základní funkce: uložení souborů do archivu, výpis obsahu a rozbalení archivu, spolupráce s externím komprimačním programem (např. gzip), další rozumné vlastnosti (viz man). Spolupráce s existujícími implementacemi (GNU tar, BSD tar, Solaris tar) je samozřejmostí.
  4. ftp server
    rozumná podmnožina protokolu FTP - tj. vemte si RFC 959, vyhodte veci, co jsou zastarale ci se nepouzivaji a zbytek implementujte (napr. uvazujte pouze pasivni mod, pouze binarni prenos souboru atd. - podivejte se pro predstavu na nejakou zakladni implementaci ftp jak je dodavana v nekterem z operacnich systemu)
  5. tftp server
    TFTP server podle RFC specifikace.
  6. www server
    rozumná podmnožina protokolu HTTP, poskytování statických stránek, včetně jednoduché implementace CGI skriptů (dynamické stránky), uvažte možnost podpory virtual hosts, konfigurovatelný způsob paralelní obsluhy (pre-fork, fork, vlákna) apod.
  7. make
    závislosti, spouštění příkazů, definice a použití maker (proměnných)
  8. cron daemon
    běžně používaný crontab formát s komentáři, nemusí být pro více uživatelů, stačí jeden crontab soubor. Použití základních proměnných v crontab souboru (pro referenci viz třeba cron(5) na FreeBSD), automatické načtení změn.
  9. on-line komunikace
    nabidnete nejake rozumne zadani.
  10. file a process manager
    operace se soubory: vypisování obsahu adresářů (s podrobnými informacemi o souborech), kopírování, mazání a přejmenování souborů, vytváření linků, nastavení práv souborů, zjišťování informací o běžících procesech, interaktivní posílání signálů procesům a pod.
  11. find
    vyberte si rozumnou podmnožinu podmínek a akcí
  12. stahování souborů pomocí HTTP nebo FTP
    dávkové stahování souborů a celých adresářových stromů z FTP a WWW serverů
  13. jednoduchý mail/news systém
    off-line komunikace, posílání a čtení (textových) zpráv mezi uživateli (skupinami uživatelů), volitelně pomocí System V IPC v rámci jednoho systému nebo s využitím soketů po síti
  14. distribuované systémy
    např. pro zpracovaní jednoho dělitelného úkolu na více strojích - sami přijďte s rozumným zadáním.
  15. filtrování pošty
    ukládání došlých mailů do folderů podle zadaných pravidel
  16. nebo se můžete nechat inspirovat u dalšího ze cvičících, Honzy F. Chadimy.

 


Last changed: Fri Jan 25 14:42:29 CET 2008