C Programiranje

POSIX signali s C programiranjem

POSIX signali s C programiranjem
Signal možemo definirati kao aktivnost koja se pokreće radi upozorenja na operaciju ili nit kad god stigne za određenu značajnu situaciju. Kad god postupak ili nit prepoznaju signal, postupak ili nit zaustavit će sve što čini i poduzeti trenutne mjere. U međuprocesnoj koordinaciji signal može biti učinkovit. U ovom vodiču proučit ćete rukovatelje signalom u Linuxu kroz jezik C.

Standardni ili redoviti signali:

Signal datoteke zaglavlja.h 'ima signale koji su u njemu navedeni kao makro konstanta. Naslov signala započeo je s "SIG", a prethodi mu kratki pregled signala. Slijedom toga, bilo koji signal ima različitu numeričku vrijednost. Programski kod bi trebao koristiti ime signala, a ne nekoliko signala. Uzrok tome je što se broj signala može razlikovati ovisno o sustavu, ali tumačenje imena je standardno. Ispod su neki redoviti signali s definiranom funkcionalnošću.

POTISAK:

Ovaj će signal obustaviti obradu. Signal SIGHUP se odbacuje kako bi ukazao na razdvajanje korisničkog terminala, vjerojatno zbog prekida daljinske komunikacije ili prekida veze.

ZNAK:

To će poremetiti proces. Signal SIGINT prima se kad god korisnik unese tipku INTR (obično Ctrl + C).

SIGQUIT:

Zaustavit će ili napustiti obradu. Signal SIGQUIT prima se kad god korisnik unese tipku QUIT (obično Ctrl + \).

SIGILL:

Izvršava se kada je izrečena nedopuštena zapovijed. Signal SIGILL stvara se svaki put kad se nastoji izvršiti neželjena ili privilegirana naredba. Kad god se stog prelije i stroj ima problema s pokretanjem kontrolera signala, također se može stvoriti SIGILL.

SIGTRAP:

Pozva se kada se izvršava neka uputa za zamku traga. Signal SIGTRAP kreira se naredbom točke prekida i drugom naredbom zamke. Program za ispravljanje pogrešaka koristi takav signal.

SIGABRT:

Zove se Abort signal. Signal SIGABRT kreira se pozivanjem metode abort (). Takav signal koristi se za ukazivanje na netočnost koju je uočio prethodno spomenuti kod i zabilježio pozivom metode abort ().

SIGFPE:

Iznimka za plutajuće točke; Signal SIGFPE proizvodi se kada se dogodi katastrofalna matematička pogreška.

SIGUSR1 i SIGUSR2:

Signali SIGUSR1 i SIGUSR2 mogu se koristiti kako želite. Korisno je za jednostavnu međuprocesnu interakciju stvoriti obrađivač signala za takve signale u aplikaciji koja prima signal.

Zadano ponašanje signala:

Za svaki signal postoji standardno ponašanje ili radnja, a moguće je prilagoditi zadano ponašanje pomoću funkcije rukovatelja. Automatsko ponašanje signala SIGKILL i SIGABRT nije se moglo izmijeniti ili zanemariti.

Termin: Završit će operaciju.

Jezgra: Generirat će se temeljni dump dokument i operacija će biti prekinuta.

Ign: Proces bi previdio signal.

Stop: Zaustavit će operaciju.

Nastavak: Operacija će biti zaustavljena.

Rukovanje signalom:

Proces ima prednost u ponašanju za signal kad je potvrđen. Proces se može ponašati na sljedeći način:

Signal se automatski odbacuje kada se zanemari definirano ponašanje signala.

Koristeći metode poput signala ili razdvajanja, kôd može registrirati funkciju rukovatelja. Zove se hvatanje signala od rukovatelja.

Ako se signal ne tretira ili zanemaruje, može se dogoditi standardno djelovanje.

Funkciju rukovanja signalom možete definirati kao:

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

Kada obrada dobije signal signal, metoda signal () može pozvati metodu 'func'. Signal () vraća pokazivač na metodu 'func' ako je uspješna ili se umjesto nje izuzetak vrati na errno i -1.

Pokazivač 'func' može imati tri vrijednosti:

SIG_DFL: Ovo je pokazivač na standardnu ​​metodu SIG DFL (), definiranu u zaglavlju.h dokument koji se koristi za dobivanje standardnog ponašanja signala.

ZNAK_PRIJAVA: Ovo je referenca na metodu ignoriranja SIG IGN (), navedenu u zaglavlju.h dokument.

Korisnički definirani pokazivač metode rukovatelja: Korisnički definirani tip metode ručnika void (*) (int), podrazumijeva da je povratna kategorija void i da je osamljeni argument int.

Stvorite signal nove datoteke.c 'i ispod napišite kôd rukovatelja signalom.

Povežite signal.c datoteka s gcc.

Tijekom pokretanja signala.c datoteku, imamo beskrajnu petlju koja se provodi u glavnoj metodi. Pritiskom na CTRL + C pokrenuo je metodu rukovatelja, a izvršenje glavne metode je zaustavljeno. Obrada glavne metode nastavljena je nakon postizanja metode rukovatelja. Nakon pritiska na Ctrl + \, operacija se prekida.

Zanemarivanje signala:

Da biste previdjeli signal, stvorite datoteku 'signal.c 'i u nju napišite ispod koda.

Vezati ignoriranje.c datoteka s gcc.

Pokrenite signal.c datoteka. Dodirnite CTRL + C, stvara se signal SIGNIT; unatoč tome, ponašanje se ne primjećuje jer se metoda rukovatelja nabraja u SIG_IGN () metodu.

Ponovno registrirajte rukovatelj signalom:

Da biste ponovno registrirali rukovatelj signalom, stvorite novu datoteku 'ponovno registriranje.c 'i u njega upišite donji kod:

Pridružite se regre.c datoteka s gcc.

Pokrenite ponovnu registraciju.c datoteka. Dok je prvi put pritisnut CTRL + C, metoda obrađivača podignuta, a obrađivač signala ponovno se registrirao na SIG_DFL. Tijekom ponovnog pritiska CTRL + C, izvršenje je prekinuto.

Šaljite signale koristeći Raise ():

Stvori datoteku 'pošalji.c 'i dodajte donji kod. Za slanje signala na metodu pozivanja koristi se metoda raise ().

Povežite slanje.c datoteka s gcc.

Postupak koristi metodu rise () za samostalno slanje SIGUSR1 signala.

Šaljite signale pomoću Kill ():

Dodajte donji kod u 'raise.c '. Upotrijebite metodu kill () za slanje signala procesnoj grupi.

Povežite povišicu.c datoteka s gcc.

Korištenjem metode kill () postupak usmjerava signal SIGUSR1 na gore spomenuto.

Interakcija roditelja i djeteta:

Da biste gledali interakciju roditelja i djeteta, napišite donji kod u datoteku.

Vezati komu.c datoteka s gcc.

Fork () / metoda generira podređeno tijelo, vraća nulu u podređeni proces i podređeni ID roditelju.

Zaključak:

U ovom vodiču vidjeli smo kako stvoriti, obraditi, poslati, zanemariti, ponovno registrirati i koristiti signal za međuprocesnu interakciju u Linuxu.

Kako promijeniti pokazivač miša i veličinu, boju i shemu pokazivača na sustavu Windows 10
Pokazivač i pokazivač miša u sustavu Windows 10 vrlo su važni aspekti operativnog sustava. To se može reći i za druge operativne sustave, tako da u is...
Besplatni i otvoreni kodni pokretački programi za razvoj Linux igara
Ovaj će članak pokriti popis besplatnih i open source pokretačkih igara koje se mogu koristiti za razvoj 2D i 3D igara na Linuxu. Brojni su takvi moto...
Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...