Zkouška 28.1.2014

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: Zkouška 28.1.2014

Re: Zkouška 28.1.2014

od Katami » 5. 2. 2015 22:01

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

Zkouška 28.1.2014

od jethro » 28. 1. 2015 23:07

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 208 x
test.c
odpovidatko na wait
(723 bajtů) Staženo 231 x
inetd.c
Hlavni program
(6.84 KiB) Staženo 241 x

Nahoru