C Programiranje

POSIX signali s programiranjem C

POSIX signali s programiranjem C
Signal lahko definiramo kot dejavnost, ki se sproži, da opozori na operacijo ali nit, kadar koli je čas prihoda za določeno pomembno situacijo. Kadar koli postopek ali nit prepozna signal, postopek ali nit ustavi vse, kar počne, in takoj ukrepa. Pri medprocesni koordinaciji je signal lahko učinkovit. V tem priročniku boste skozi jezik C preučevali obdelovalce signalov v Linuxu.

Standardni ali običajni signali:

Signal datoteke glave.h 'vsebuje signale, ki so v njem določeni kot makro konstanta. Naslov signala se je začel s “SIG”, pred njim pa je kratek pregled signala. Posledično ima kateri koli signal ločeno številčno vrednost. Programska koda mora uporabljati ime signala in ne več signalov. Vzrok za to je, da se število signalov lahko razlikuje glede na sistem, vendar je razlaga imen standardna. Spodaj je nekaj običajnih signalov z opredeljeno funkcionalnostjo.

VZDIH:

Ta signal bo prekinil obdelavo. Signal SIGHUP se oddaja, kar kaže na ločitev uporabniškega terminala, verjetno zaradi prekinitve ali prekinitve komunikacije na daljavo.

POMEN:

Motil bo postopek. Signal SIGINT je prejet vsakič, ko uporabnik vnese tipko INTR (običajno Ctrl + C).

SIGQUIT:

Obdelavo bo ustavil ali zapustil. Signal SIGQUIT je sprejet vsakič, ko uporabnik vnese tipko QUIT (običajno Ctrl + \).

SIGILL:

Zažene se, ko je izdan nedovoljen ukaz. Signal SIGILL se ustvari vsakič, ko si prizadevamo za izvajanje junk ali privilegiranega ukaza. Kadar se sklad prelije in ima naprava težave z upravljanjem signalnega krmilnika, se lahko ustvari tudi SIGILL.

SIGTRAP:

Pokliče se, ko se izvaja neko navodilo za ujemanje sledi. Signal SIGTRAP se ustvari z ukazom točke prekinitve in drugim ukazom prestrezanja. Razhroščevalec uporablja tak signal.

SIGABRT:

Imenuje se signal za prekinitev. Signal SIGABRT se ustvari s klicanjem metode abort (). Tak signal se uporablja za opozarjanje na netočnost, ki jo opazi zgoraj omenjena koda in zabeleži klic metode abort ().

SIGFPE:

Izjema za plavajoče vejice; Signal SIGFPE se ustvari, ko pride do katastrofalne matematične napake.

SIGUSR1 in SIGUSR2:

Signala SIGUSR1 in SIGUSR2 lahko uporabljate, kakor želite. Za enostavno medprocesno interakcijo je koristno ustvariti obdelovalec signalov za take signale v aplikaciji, ki dobi signal.

Privzeto vedenje signalov:

Za vsak signal obstaja standardno vedenje ali dejanje, privzeto vedenje pa je mogoče prilagoditi s funkcijo vodnika. Samodejnih obnašanj signalov SIGKILL in SIGABRT ni bilo mogoče spremeniti ali zanemariti.

Izraz: Prekinil bo operacijo.

Jedro: Ustvarjen bo osnovni dokument o izpisu in operacija bo zaključena.

Vžig: Postopek bi spregledal signal.

Stop: To bo ustavilo operacijo.

Nadaljevanje: Operacija se ne bo ustavila.

Ravnanje s signali:

Proces ima prednost obnašanja za signal, ko je potrjen. Postopek se lahko obnaša na naslednji način:

Signal se samodejno zavrne, če spregledamo določeno vedenje signala.

Koda lahko z uporabo metod, kot sta signal ali sigakcija, registrira funkcijo obdelovalca. Imenuje se lovljenje signala vodnika.

Če se signal ne zdravi ali zanemarja, lahko pride do običajnega dejanja.

Funkcijo obdelave signalov lahko določite kot:

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

Ko obdelava pridobi signalni znak, lahko metoda signal () pokliče metodo 'func'. Signal () vrne kazalec na metodo 'func', če je uspešna ali se namesto tega vrne izjema na errno in -1.

Kazalec 'func' ima lahko tri vrednosti:

SIG_DFL: To je kazalec na standardno metodo SIG DFL (), določeno v glavi.h dokument, ki se uporablja za pridobivanje standardnega vedenja signala.

SIG_IGN: To je sklic na metodo prezrtja SIG IGN (), določeno v glavi.h dokument.

Kazalec metode uporabniško definiranega obdelovalca: Uporabniško določena metoda metode vodnika void (*) (int) pomeni, da je vrnjena kategorija void in da je osamljeni argument int.

Ustvari novo datoteko 'signal.c 'in vanjo vpišite kodo upravljavca signala.

Povežite signal.c datoteka z gcc.

Med izvajanjem signala.c, imamo v glavni metodi neskončno zanko. S pritiskom na CTRL + C se je zagnala metoda obdelave in izvajanje glavne metode se je ustavilo. Obdelava glavne metode se je nadaljevala po zaključku metode obdelave. Ko pritisnete Ctrl + \, se operacija konča.

Ignoriranje signala:

Če želite spregledati signal, ustvarite datotečni signal.c 'in vanjo napiši spodnjo kodo.

Veži ignorirano.c datoteka z gcc.

Zaženite signal.c datoteko. Dotaknite se CTRL + C, ustvari se signal SIGNIT; kljub temu je vedenje neopaženo, ker je metoda obdelave oštevilčena v metodo SIG_IGN ().

Vnovična registracija upravljavca signalov:

Če želite znova registrirati obdelovalca signalov, ustvarite novo datoteko 'rereg.c 'in vanj vpišite spodnjo kodo:

Pridružite se preoblikovanju.c datoteka z gcc.

Zaženite ponovno registracijo.c datoteko. Med prvim pritiskom na tipko CTRL + C se je dvignila metoda obdelovalca in se je obdelovalec signala znova registriral v SIG_DFL. Med ponovnim pritiskom na CTRL + C se je izvršitev zaključila.

Pošiljanje signalov z uporabo funkcije Raise ():

Ustvari datoteko 'pošlji.c 'in dodajte spodnjo kodo. Za pošiljanje signalov klicni metodi se uporablja metoda raise ().

Povežite pošiljanje.c datoteka z gcc.

Postopek uporablja metodo dviganja () za samostojni prenos signala SIGUSR1.

Pošiljanje signalov s pomočjo Kill ():

V spodnjo postavko dodajte spodnjo kodo.c '. Za pošiljanje signalov skupini procesov uporabite metodo kill ().

Poveži dvig.c datoteka z gcc.

Z uporabo metode kill () postopek usmerja signal SIGUSR1 na prej omenjeno.

Interakcija med starši in otroki:

Če si želite ogledati interakcijo med starši in otroki, v datoteko zapišite spodnjo kodo.

Povežite comm.c datoteka z gcc.

Fork () / metoda generira podrejenega, vrne nič v podrejeni postopek in nadrejeni ID nadrejenemu.

Zaključek:

V tem priročniku smo videli, kako ustvariti, obdelati, poslati, prezreti, ponovno registrirati in uporabiti signal za medprocesno interakcijo v Linuxu.

Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...
Najboljše igre ukazne vrstice za Linux
Ukazna vrstica ni le vaš največji zaveznik pri uporabi Linuxa - lahko je tudi vir zabave, saj jo lahko uporabljate za igranje številnih zabavnih iger,...
Najboljše aplikacije za preslikavo gamepadov za Linux
Če želite igre na Linuxu igrati z igralno ploščico namesto s tipičnim sistemom za vnos tipkovnice in miške, je za vas na voljo nekaj uporabnih aplikac...