11. praktikum - signaalid ja longjmp(itv0020): erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
Resümee puudub
3. rida: 3. rida:
''See praktikum harjutab signaalide ja setjmp/longjmp koostoime katsetamist''
''See praktikum harjutab signaalide ja setjmp/longjmp koostoime katsetamist''


Hilinen veidi tundi.


== Ülesanne ==
== Ülesanne ==

Redaktsioon: 16. november 2010, kell 16:20

Süsteemprogrammeerimine keeles C

Praktikumid

Laborid

See praktikum harjutab signaalide ja setjmp/longjmp koostoime katsetamist


Ülesanne

  • Kirjutage programm, mis kasutab funktsiooni raise(), et saata endale mingi signaal (näiteks SIGINT). Mis juhtub?
  • Täiendage programmi funktsiooniga signal(), et saadetavat signaali ignoreerida. Katsetage.
  • Täiendage funktsiooni signal() nii, et saadetav signaal püütakse kinni ja käivitatakse signaali puhul mingi funktsioon.
  • Proovige funktsiooni alarm() kasutamist signaali SIGALRM saatmiseks.
  • Kirjutage eelneva kogemuse baasil programm, mis on kinni lõputus tsüklis, kuni keegi vajutab CTRL+C (ehk saadab SIGINT signaali), mille peale trükkige "Väljun" ning väljuge.
  • Täiendage programmi funktsioonidega setjmp() ja longjmp() nii, et teie programm:
    • Küsiks kasutajalt fgets() funktsiooniga oma nime.
    • Kui kasutaja seda 10 sekundi jooksul ei sisesta, valib vaikimisi sõna "Anonumous".
    • Kui kasutaja vajutab CTRL+C, tühistatakse alarm() ja küsitakse kasutajalt "Are you sure you want to stay Anonymous? [y/N]"
      • Jah puhul valitakse nimeks Anonymous
      • "Ei" puhul jätkab nime ootamist ja nullib taimeri.