Programování v Unixu (SWI015p1a)

MFF UK, zimní semestr 2005/2006

News

Osnova přednášky

Zde je osnova letošní přednášky.

Materiály k přednášce

Postupně aktualizuji poznámkové slajdy. Zde jsou z nich vygenerované slajdy pro přednášky.

Různé jednoduché ukázkové příklady z přednášek, (22.7.2006) včetně příkladů s vlákny. Často nejsou kompletní a aby byly krátké, úmyslně nejsou vždy testované návratové hodnoty systémových volání, není k nim žádný popis, jejich účelem bylo pouze ukázat základní myšlenky přednášené látky na přednáškách. Pro účely vysvětlení konkretních vlastností mohou obsahovat úmyslné chyby. Toto nejsou příklady na to, jak se mají psát zápočtové programy.

Zde jsou příklady od Martina Berana, názvy souborů k jednotlivým přednáškám naleznete v loňské osnově a kromě látky, která již letos přednášená nebyla (Sys V IPC sdílená paměť a zprávy) tyto příklady korespondují s tím, co se přednáší letos.

Live CD

Pro rozumné vyzkoušení některých systémových volání i dalších věcí je vhodné být root. Pokud nechcete nebo nemáte možnost si nějaký systém nainstalovat doma a nemáte rootovské konto jinde, může pro začátek postačit některá z live distribucí, kterou pouze vypálíte na CD a nabootujete, aniž byste museli cokoli změnit na svém počítači. Doporučuju například distribuci FreeBSD, která se nazývá FreeSBIE a je možné ji dokonce i na disk nainstalovat.

Zkoušky

Termíny

Termíny jsou ve školním informačním systému.

Pravidla

Zkouška má písemnou a ústní část. Písemná část zkoušky trvá 90 minut a jejím obsahem je napsání krátkého programu používajícího služby UNIXu. Písemka se píše u počítače, vaše řešení si na konci uložím k sobě. Je dovoleno používat literaturu (slidy a poznámky z přednášky, knihy, manuálové stránky, web apod.).

Není dovoleno se logovat na jiné stroje než je ten, u kterého sedíte, s výjimkou stroje u-us pro otestování vašeho programu na jiné architektuře ani není dovoleno přistupovat do /home adresáře mimo váš domovský adresář -- není prostě dovoleno komunikovat mezi sebou jakýmkoli způsobem.

Ústní část zkoušky má dvě části:

  1. diskuse nad písemkou
  2. teorie (2 otázky + doplňující otázka v případě nerozhodné známky)

Součástí hodnocení je i překlad pomocí překladače gcc s přepínačem -Wall, přehlednost napsaného programu, správné otestování použitých systémových volání.

(29.12.2005): co se týče testování návratových hodnot volání, chci správně otestovat alespoň jedno takové volání a pak všechna ,,důležitá'' (např. open). To znamená, že testovat návratové hodnoty třeba funkcí pro zamykání/odemykání mutexů není nutné. Jinými slovy - pokud víte co děláte, nemusíte psát zbytečný kód.

Při ústní zkoušce nejsou dovolené žádné pomůcky. Studenti se na zkoušku přihlašují zápisem do příslušného formuláře (elektronicky na WWW), o připuštění nezapsaného studenta ke zkoušce rozhoduje zkoušející (podle počtu přítomných studentů). Nedostavení se ke zkoušce je považováno za neúspěšný termín, pokud je termín plný, tj. je nutné se včas odhlásit, abyste neblokovali volné místo. Ke zkoušce je potřeba zápočet, včetně předtermínů.

Okruhy otázek jsou prakticky úplně stejné jako minulý rok.

Příklady ze zkoušek.

Hodnocení

Pokud vám zkouškový program nefunguje vůbec, případně je jen z poloviny hotový apod., rovná se to neúspěšnému termínu. Pokud funguje s drobnými chybami, ale je vidět, že základ řešení je napsán korektně, podle kvality implementace, případných chyb a diskuze nad řešením je rozhodnuto o známce z první části.

Hodnocení druhé části je souhrnné hodnocení daných dvou otázek. Pokud není výsledná známka této části alespoň za tři, rovná se to neúspěšnému termínu.

Celkové hodnocení se skládá z hodnocení ústní a písemné části. Pokud je písemná nebo ústní část za tři, nemůže být celkové hodnocení lepší než tři. Při nerozhodné známce rozhoduje třetí otázka pro ústní část.

Cvičení

Různé příklady ze cvičení a zadání na doma (moje skupiny).

Příklady ze cvičení Tomáše Herana.

Zápočty

Podmínky

Nutnou a postačující podmínkou pro udělení zápočtu je vytvoření a odevzdání zápočtového programu. Zadání zápočtového programu se stanoví individuální dohodou studenta se cvičícím. Zápočtový program musí být napsán v jazyce C 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() nebo write().

Program musí důsledně ošetřovat chyby a rozumně reagovat na nesprávný vstup. Zdrojový text 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). 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é.

(25.12.2005): sice jsem to považoval za samozřejmé vzhledem k výše uvedenému, ale raději explicitně - překlad musí proběhnout bez varování.

Pokud se student s cvičícím nedohodne jinak, musí zápočtový program být 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á.

Zápočtový program zadává a zápočet uděluje cvičící, ke kterému je student zapsán na cvičení. Výjimku je možné udělat pouze z důvodu dlouhodobé nepřítomnosti cvičícího.

Předání zápočtů

Moje skupiny: je možné mailem. Mail musí obsahovat vše potřebné, včetně zdrojáků, dokumentace, příkladů kde to dává smysl (make, find, ...), 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. Prosím uvědomte si, že nemám čas hodinu zkoumat, co váš příklad vlastně dělá nebo má dělat. Dokumentací se myslí styl podobný například manuálové stránce apod., za dokumentaci se nepovažuje soubor obsahující pár řádek. Pokud budete programovat např. find, tak budu chtít několik ukázkových zadání, co nejsložitějších, s popisem toho, co dělají. Některé věci mohu chtít předvést osobně, ideálně po cvičení či v termínech zkoušky (ne vaší).

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.

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

Je vhodně se se cvičícím předem dohodnout co přesně budete dělat.

  1. 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.
  2. 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)
  3. jednoduchý WWW server
    rozumná podmnožina protokolu HTTP, poskytování statických stránek, ideálně i jednoduchá implementace CGI skriptů
  4. jednoduchý FTP server
    rozumná podmnožina protokolu FTP, případně TFTP server.
  5. make
    závislosti, spouštění příkazů, definice a použití maker (proměnných)
  6. 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, automatické načtení změn.
  7. on-line komunikace mezi uživateli
    talk/chat, hry pro několik hráčů (piškvorky, dáma, člověče nezlob se, apod.); funguje v rámci jednoho počítače nebo po síti, pro komunikaci si lze vybrat:
  8. 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
  9. find
    vyberte si rozumnou podmnožinu podmínek a akcí
  10. stahování souborů pomocí HTTP nebo FTP
    dávkové stahování souborů (popř. celých adresářových stromů) z FTP a WWW serverů
  11. 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
  12. filtrování pošty
    ukládání došlých mailů do folderů podle zadaných pravidel
  13. vlastní zadání

Konzultace

Konzultace jsou možné během cca 15 minut před přednáškou přímo v posluchárně, případně během 15 minut po ní. Je také možné se individuálně domluvit mailem. Konzultace se cvičícími si dohodnou studenti individuálně.

Rozvrh

Út	3-4	09:00	    S5   SWI015p1a  Programování v Unixu	I/3/IP, I/3/ISPS	Jan Pechanec - SISAL

Po	3-4	09:00	s)  SU1  SWI015x1g  Programování v Unixu	I/3/IOI			Tomáš Heran - SISAL
Po	3-4	09:00	s)  SU1  SWI015x1h  Programování v Unixu	I/3/ISPS		Tomáš Heran - SISAL
St	3-4	09:00	s)  SU1  SWI015x1a  Programování v Unixu	I/3/IOI			Jan Pechanec - SISAL
St	3-4	09:00	s)  SU1  SWI015x1b  Programování v Unixu	I/3/ISPS		Jan Pechanec - SISAL
St	9-10	14:00	s)  SU1  SWI015x1c  Programování v Unixu	I/3/IP			Jan Chadima - SISAL
St	9-10	14:00	s)  SU1  SWI015x1d  Programování v Unixu	I/3/IOI			Jan Chadima - SISAL
Čt	11-12	15:40	s)  SU1  SWI015x1e  Programování v Unixu	I/3/ISPS		Jakub Jelínek - SISAL
Čt	11-12	15:40	s)  SU1  SWI015x1f  Programování v Unixu	I/3/IP			Jakub Jelínek - SISAL