11. praktikum - signaalid ja longjmp(itv0020)

Allikas: Lambda
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 "Exiting" 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 "Anonymous".
    • 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.