11. praktikum - signaalid ja longjmp(itv0020)
Allikas: Lambda
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.