C programavimas

POSIX signalai su C programavimu

POSIX signalai su C programavimu
Mes galime apibrėžti signalą kaip veiklą, kuri suaktyvinama įspėjant operaciją ar giją, kai tik ateina tam tikros reikšmingos situacijos laikas. Kai procedūra ar gija patvirtina signalą, procedūra ar gija sustabdys viską, ką daro, ir imsis neatidėliotinų veiksmų. Tarpusavio koordinavime signalas gali būti efektyvus. Šiame vadove jūs mokysitės signalo tvarkytuvų sistemoje „Linux“ per C kalbą.

Standartiniai arba įprasti signalai:

Antraštės failo signalas.h 'turi signalus, nurodytus kaip makro konstanta. Signalo pavadinimas prasidėjo „SIG“ ir prieš jį pateikiama trumpa signalo apžvalga. Taigi bet koks signalas turi aiškią skaitinę vertę. Programos kodas turėtų naudoti signalo pavadinimą, o ne kelis signalus. Priežastis yra ta, kad signalų skaičius gali skirtis priklausomai nuo sistemos, tačiau vardų aiškinimas yra standartinis. Žemiau yra keletas įprastų signalų, apibrėžiančių jų funkcionalumą.

SIGHUP:

Šis signalas sustabdys apdorojimą. Signalas „SIGHUP“ atmetamas, siekiant nurodyti vartotojo terminalo atsiribojimą, greičiausiai dėl nuotolinio ryšio nutrūkimo ar pakabinimo.

ŽENKLAS:

Tai sutrikdys procesą. SIGINT signalas gaunamas, kai vartotojas įveda INTR klavišą (paprastai „Ctrl“ + C).

SIGQUIT:

Jis sustabdys arba baigs apdorojimą. SIGQUIT signalas gaunamas, kai vartotojas įveda klavišą QUIT (paprastai „Ctrl + \“).

SIGILL:

Jis vykdomas, kai yra padaryta neteisėta komanda. SIGILL signalas sukuriamas visada, kai stengiamasi atlikti šiukšlių ar privilegijuotą komandą. Kai kaminas perpildomas ir mašinai kyla problemų valdant signalo valdiklį, taip pat gali būti sukurta SIGILL.

SIGTRAP:

Jis vadinamas tada, kai vykdoma tam tikra sekimo instrukcija. SIGTRAP signalą sukuria pertraukimo taško komanda ir kita spąstų komanda. Derintojas naudoja tokį signalą.

SIGABRT:

Jis vadinamas „Nutraukti“ signalu. Signalas SIGABRT sukuriamas iškvietus abort () metodą. Toks signalas naudojamas nurodant netikslumą, kurį pastebi kodas, kurį paminėjo ir užregistravo nutraukimo () metodo skambutis.

SIGFPE:

Plūduriuojančių taškų išimtis; SIGFPE signalas gaunamas įvykus katastrofiškai matematinei klaidai.

SIGUSR1 ir SIGUSR2:

Signalus SIGUSR1 ir SIGUSR2 galima naudoti taip, kaip jums patinka. Lengvai tarpprocesinei sąveikai naudinga sukurti signalų tvarkytuvą tokiems signalams programoje, kuri gauna signalą.

Numatytasis signalų elgesys:

Kiekvienam signalui būdinga įprasta elgsena ar veiksmas, o numatytąjį elgesį galima pakoreguoti naudojant „Handler“ funkciją. Automatinio SIGKILL ir SIGABRT signalo elgesio nepavyko pakeisti ar nepaisyti.

Terminas: Tai nutrauks operaciją.

Šerdis: Bus sukurtas pagrindinis dokumentas ir operacija bus nutraukta.

Ignas: Procesas nepastebėtų signalo.

Sustabdyti: Tai sustabdys operaciją.

Tęsinys: Operacija bus sustabdyta.

Signalo valdymas:

Procesas teikia pirmenybę signalui, kai jis yra patvirtinamas. Procesas gali elgtis taip:

Signalas automatiškai atmetamas, kai nepaisoma apibrėžto signalo elgesio.

Naudojant tokius metodus kaip signalas ar sigaction, kodas gali užregistruoti tvarkytojo funkciją. Tai vadinama signalo gaudymu iš prižiūrėtojo.

Jei signalas nėra gydomas ar jo nepaisoma, gali atsirasti standartinis veiksmas.

Signalo valdymo funkciją galite apibrėžti taip:

$ Int signal () int signum, void (* funk) (int))

Kai apdorojimas gauna signalo signalą, signalo () metodas gali iškviesti „func“ metodą. „Signal“ () grąžina žymeklį į „func“ metodą, jei jis klesti arba vietoj klaidos grąžinama išimtis ir -1.

„Func“ žymeklis gali turėti tris reikšmes:

SIG_DFL: Tai yra standartinio SIG DFL () metodo, apibrėžto antraštėje, rodyklė.h dokumentas, naudojamas norint gauti standartinį signalo elgesį.

SIG_IGN: Tai nuoroda į SIG IGN () ignoravimo metodą, nurodytą antraštėje.h dokumentas.

Vartotojo apibrėžtas tvarkytuvo metodo žymeklis: Vartotojo apibrėžtas tvarkytojo metodo tipas void (*) (int) reiškia, kad grąžinimo kategorija yra negaliojanti ir kad pavienis argumentas yra int.

Sukurti naują failo signalą.c 'ir parašykite žemiau signalo tvarkytojo kodo.

Susiekite signalą.c failas su gcc.

Paleidžiant signalą.c failą, mes turime begalę kilpų, atliekančių pagrindinį metodą. Paspaudus CTRL + C, jis pradėjo apdorojimo metodą ir pagrindinis metodo vykdymas sustojo. Pagrindinis metodo apdorojimas tęsėsi atlikus tvarkytojo metodą. Paspaudus „Ctrl +“, operacija baigiama.

Signalo nepaisymas:

Norėdami nepastebėti signalo, sukurkite failo signalą.c 'ir parašykite po kodu.

Susiekite ignoruoti.c failas su gcc.

Paleiskite signalą.c failą. Palieskite CTRL + C, sukuriamas SIGNIT signalas; nepaisant to, elgesys nepastebimas, nes tvarkytojo metodas yra suskaičiuotas į metodą SIG_IGN ().

Perregistruoti signalo tvarkytuvą:

Norėdami iš naujo užregistruoti signalo tvarkytuvą, sukurkite naują failą „rereg“.c “ir įrašykite žemiau esantį kodą:

Susiekite reregą.c failas su gcc.

Vykdyti rereg.c failą. Pirmą kartą paspaudus CTRL + C tvarkytojo metodą, signalo tvarkytuvas perregistruotas į SIG_DFL. Dar kartą paspaudus CTRL + C, vykdymas buvo nutrauktas.

Siųsti signalus naudojant „Raise“ ():

Sukurti failą „siųsti“.c 'ir pridėkite žemiau esantį kodą. Siunčiant signalus skambinimo metodu, naudojamas pakėlimo () metodas.

Susiekite siuntimą.c failas su gcc.

Procesas naudoja pakėlimo () metodą SIGUSR1 signalui perduoti atskirai.

Siųsti signalus naudojant „Kill“ ():

Pridėkite žemiau esantį kodą laukelyje.c '. Norėdami siųsti signalus proceso grupei, naudokite nužudymo metodą ().

Susiekite pakėlimą.c failas su gcc.

Naudojant kill () metodą, procesas nukreipia SIGUSR1 signalą į aukščiau paminėtą.

Tėvo ir vaiko sąveika:

Norėdami stebėti tėvų ir vaikų sąveiką, faile įrašykite žemiau esantį kodą.

Susiekite kom.c failas su gcc.

Šakė () / metodas sukuria vaiką, grąžina nulį į vaiko procesą ir vaiko ID tėvams.

Išvada:

Šiame vadove matėme, kaip sukurti, tvarkyti, siųsti, ignoruoti, perregistruoti ir naudoti signalą procesų sąveikai sistemoje „Linux“.

Nemokami ir atvirojo kodo žaidimų varikliai, skirti kurti „Linux“ žaidimus
Šiame straipsnyje bus pateiktas nemokamų ir atvirojo kodo žaidimų variklių, kurie gali būti naudojami kuriant 2D ir 3D žaidimus „Linux“, sąrašas. Toki...
„Tomb Raider for Linux“ pamoka
„Tomb Raider“ šešėlis yra dvyliktas „Tomb Raider“ serijos priedas - veiksmo ir nuotykių žaidimų franšizė, sukurta „Eidos Montreal“. Žaidimą kritikai i...
Kaip padidinti FPS sistemoje „Linux“?
FPS reiškia Kadrai per sekundę. FPS užduotis yra išmatuoti kadrų greitį atkuriant vaizdo įrašus ar žaidimus. Paprastais žodžiais, nepertraukiamų viso ...