SWI015

Vlad at 2008-09-22 22:43:46

Zkouška 2008-09-22
ZADANI
XTIMEOUT=<vteriny> XSIZE=<bajty> ./a.out <jméno spustitelného souboru>
Jinými slovy, v proměnných prostředí dostanete timeout a size, pokud nejsou tak timeout=11 size=10. Úkolem vašeho programu je udělat fork a spustit v synovském procesu daný spustitelný soubor. Otec čte svůj stdin do bufferu o velikosti size a každých timeout vteřin přepisuje obsah bufferu do roury, ze které čte syn (spuštěný soubor). Pokud nastane timeout dřív než se naplní buffer, vypíše na stderr "[TIMEOUT]". Jinak přepisuje do roury při naplnění bufferu. size není nijak omezeno - je třeba si buffer naaolkovat, nejde použít statický.

$ while : ; do printf 1; sleep 1; done | XTIMEOUT=4 XSIZE=5 ./a.out /bin/cat
[TIMEOUT]1111[TIMEOUT]1111[TIMEOUT]1111

$ while : ; do printf 1; sleep 1; done | XTIMEOUT=5 XSIZE=3 ./a.out /bin/cat
111
#každé tři vteřiny se objeví nové 3 jedničky (naplní se buffer, timeout nenastane)

Je to jedno z těch zdlouhavých zadání, kdy musíte pochopit, co tím chtěl autor říct, než začnete kódit. Do poloviny času mi to fungovalo jen přibližně, než mi došlo co se má opravdu dělat.