Zkouška 28.1.2014

Programování v UNIXu. Cvičení probíhá v laboratoři UNIX a poskytuje posluchačům průpravu v programování v jazyce C v prostředí UNIX.
jethro
Matfyz(ák|ačka) level I
Příspěvky: 5
Registrován: 3. 1. 2012 16:41
Typ studia: Informatika Bc.

Zkouška 28.1.2014

Příspěvek od jethro »

Dnes bylo za úkol napsat inetd.
Máme konfigurák tvaru:
<port> <wait|nowait> <cmd>

Počet řádků není nijak omezen, na krásu parsování se nehledí, převod text-> struktura nebyl nijak hodnocen. Můžeme předpokládat, že je korektní

Program na začátku načte konfigurák, nějak ho vypíše na výstup a pak se bindne na porty dle konfigurace a když se na ně něco připojí, tak spustí <cmd> a předá mu spojení:
  • nowait -> udělá accept, deskriptory 0,1,2 nastaví na socket z acceptu a execne program (tudíž ten ani neví, že pracuje po síti)
    wait -> přímo poslouchací socket nastaví jako deskriptor 0 a execne program (a ten teprve volá accept)
Pokud přijde nový požadavek, tak se u nowait spustí další <cmd>, u wait si ho musí zpracovat <cmd> sám, dokud ten žije, tak se o poslouchací socket inetd nestará, když umře, tak ho při dalším požadavku znovu spustí.

Klíčové věci: getaddrinfo (aby umělo IPv4 i IPv6), poll, zavírat dětem sockety, co nepotřebují, hlídat si mrtvé děti a uklízet po nich.
První to vzdal asi po 4 hodinách, po asi 4:45 to měl první, celkem to dva vzdali a tři udělali, tuším za 2. Já jsem končil s jedničkou asi 21.15.
Přikládám svoje řešení, docela funguje, chybu mi v něm nenašel.
Přílohy
zk.tar.gz
Tar se vsim, protoze phpbb je idiot
(2.82 KiB) Staženo 204 x
test.c
odpovidatko na wait
(723 bajtů) Staženo 227 x
inetd.c
Hlavni program
(6.84 KiB) Staženo 237 x
Katami
Matfyz(ák|ačka) level I
Příspěvky: 27
Registrován: 3. 2. 2014 13:40
Typ studia: Informatika Ph.D.

Re: Zkouška 28.1.2014

Příspěvek od Katami »

čistě pro další generace. Toto zadání bylo 28.1.2015
Odpovědět

Zpět na „SWI015 Programování v Unixu“