C Programovanie

Signály POSIX s programovaním C

Signály POSIX s programovaním C
Signál môžeme definovať ako aktivitu, ktorá sa spustí, aby varovala operáciu alebo vlákno vždy, keď nastane čas príchodu na určitú významnú situáciu. Kedykoľvek procedúra alebo vlákno potvrdí signál, procedúra alebo vlákno sa zastaví, čo robí, a urobí okamžité kroky. Pri koordinácii medzi procesmi môže byť signál efektívny. V tejto príručke budete študovať obsluhy signálov v systéme Linux prostredníctvom jazyka C.

Štandardné alebo bežné signály:

Signál hlavičkového súboru.h 'má v nej špecifikované signály ako makro konštantu. Názov signálu sa začínal na „SIG“ a pred ním je stručný prehľad signálu. V dôsledku toho má akýkoľvek signál zreteľnú číselnú hodnotu. Programový kód by mal používať názov signálu, nie niekoľko signálov. Príčinou je to, že počet signálov sa môže líšiť v závislosti od systému, interpretácia mien je však štandardná. Ďalej uvádzame niekoľko pravidelných signálov s definovanými funkciami.

SIGNUP:

Tento signál ukončí spracovanie. Signál SIGHUP sa oddeľuje, aby indikoval disociáciu terminálu používateľa, pravdepodobne v dôsledku prerušenia alebo zavesenia vzdialenej komunikácie.

SIGINT:

Naruší to postup. Signál SIGINT sa prijíma vždy, keď používateľ zadá kláves INTR (zvyčajne Ctrl + C).

SIGQUIT:

Zastaví alebo ukončí spracovanie. Signál SIGQUIT sa prijíma vždy, keď používateľ zadá kláves QUIT (zvyčajne Ctrl + \).

SIGILL:

Spustí sa, keď bol vydaný nezákonný príkaz. Signál SIGILL sa vytvára vždy, keď sa vynakladá úsilie na vykonanie haraburdu alebo privilegovaného príkazu. Kedykoľvek dôjde k pretečeniu stohu a stroj má problémy s prevádzkou signálového radiča, môže sa tiež vytvoriť SIGILL.

SIGTRAP:

Zavolá sa, keď sa vykonáva nejaká inštrukcia sledovania pasce. Signál SIGTRAP je vytváraný príkazom zlomu a ďalším príkazom pasce. Debugger používa takýto signál.

SIGABRT:

Nazýva sa to Prerušiť signál. Signál SIGABRT sa vytvorí volaním metódy abort (). Takýto signál sa používa na poukázanie na nepresnosť pozorovanú vyššie uvedeným kódom a zaznamenanú volaním metódy abort ().

SIGFPE:

Výnimka pre pohyblivé čiarky; Signál SIGFPE sa vytvorí, keď dôjde k katastrofickej matematickej chybe.

SIGUSR1 a SIGUSR2:

Signály SIGUSR1 a SIGUSR2 je možné používať ľubovoľným spôsobom. Pre ľahkú medziprocesovú interakciu je výhodné vytvoriť obslužný program pre také signály v aplikácii, ktorá signál dostane.

Predvolené správanie signálov:

Pre každý signál existuje štandardné správanie alebo akcia a je možné upraviť predvolené správanie pomocou funkcie obsluhy. Automatické správanie signálov SIGKILL a SIGABRT nebolo možné upraviť alebo zanedbať.

Termín: Operácia sa tým ukončí.

Jadro: Bude vygenerovaný dokument s výpisom jadra a operácia bude ukončená.

Ign: Tento proces by prehliadol signál.

Stop: Zastaví to operáciu.

Pokračovanie: Prevádzka bude zachovaná pred zastavením.

Manipulácia so signálom:

Proces má prednosť v správaní sa k signálu, keď je potvrdený. Proces sa môže správať nasledovne:

Signál sa automaticky vypne, keď sa definované správanie signálu prehliadne.

Pomocou metód ako signál alebo sigaction môže kód zaregistrovať funkciu obslužnej rutiny. Volá sa to zachytenie signálu od psovoda.

Ak signál nie je liečený alebo zanedbávaný, môže dôjsť k štandardnej akcii.

Funkciu spracovania signálu môžete definovať ako:

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

Keď spracovanie získa signálne signum, metóda signal () môže nazvať metódu „func“. Signal () vráti ukazovateľ na metódu „func“, ak je prosperujúca alebo sa namiesto nej vráti výnimka errno a -1.

Ukazovateľ „func“ môže mať tri hodnoty:

SIG_DFL: Toto je ukazovateľ na štandardnú metódu SIG DFL () definovanú v hlavičke.h dokument používaný na získanie štandardného správania signálu.

SIG_IGN: Toto je odkaz na metódu ignorovania SIG IGN () uvedenú v hlavičke.h dokument.

Užívateľom definovaný ukazovateľ metódy obsluhy: Používateľom definovaná metóda obslužnej metódy void (*) (int) znamená, že návratová kategória je neplatná a že solitárny argument je int.

Vytvorte nový signál súboru.c 'a napíšte do nej kód obslužného programu signálu.

Prepojte signál.c súbor s gcc.

Počas chodu signálu.c súbor, máme nekonečnú slučku vykonávajúcu v hlavnej metóde. Stlačením kombinácie klávesov CTRL + C sa spustila metóda obslužnej rutiny a vykonávanie hlavnej metódy sa zastavilo. Hlavné spracovanie metódy pokračovalo po dokončení handlerovej metódy. Po stlačení Ctrl + \ sa operácia ukončí.

Ignorovať signál:

Ak chcete prehliadnuť signál, vytvorte signál súboru.c 'a napíšte pod ňu kód.

Zviažte ignoráciu.c súbor s gcc.

Spustite signál.c súbor. Klepnite na CTRL + C, signál SIGNIT sa vytvorí; napriek tomu je toto správanie nepovšimnuté, pretože metóda handlera je vymenovaná za metódu SIG_IGN ().

Znova zaregistrovať obslužný program signálu:

Pre opätovnú registráciu obsluhy signálu vytvorte nový súbor 'rereg.c 'a vpíšte do neho nasledujúci kód:

Priraďte prihlášku.c súbor s gcc.

Spustite znova.c súbor. Pri prvom stlačení sa zvýšila obslužná metóda CTRL + C a obslužná rutina signálu sa znova zaregistrovala na SIG_DFL. Ďalším stlačením klávesov CTRL + C sa vykonanie ukončilo.

Posielajte signály pomocou Raise ():

Vytvorte súbor 'odoslať.c 'a pridajte nasledujúci kód. Na odosielanie signálov do metódy volania sa používa metóda raise ().

Súviste s odoslaním.c súbor s gcc.

Tento proces využíva metódu raise () na samotný prenos signálu SIGUSR1.

Posielajte signály pomocou Kill ():

Pridajte nasledujúci kód do kódu „raise“.c '. Na odoslanie signálov do skupiny procesov použite metódu kill ().

Prepojte zvýšenie.c súbor s gcc.

Použitím metódy kill () proces smeruje signál SIGUSR1 na vyššie uvedené.

Interakcia rodič - dieťa:

Ak chcete sledovať interakciu rodič - dieťa, napíšte nasledujúci kód do súboru.

Spojiť kom.c súbor s gcc.

Vidlica () / metóda generuje dieťa, vracia nulu k podradenému procesu a ID dieťaťa k rodičovi.

Záver:

V tejto príručke sme videli, ako vytvoriť, spracovať, odoslať, ignorovať, preregistrovať a použiť signál na medziprocesovú interakciu v systéme Linux.

Hry Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
OpenRA je herný engine Libre / Free Real Time Strategy, ktorý obnovuje rané hry z Westwoodu, ako napríklad klasické Command & Conquer: Red Alert. Dist...
Hry Nainštalujte si najnovší Dolphin Emulator pre Gamecube a Wii na Linuxe
Nainštalujte si najnovší Dolphin Emulator pre Gamecube a Wii na Linuxe
Emulátor Dolphin vám umožní hrať vybrané hry Gamecube a Wii na osobných počítačoch Linux (PC). Emulátor Dolphin, ktorý je voľne dostupným emulátorom ...
Hry Ako používať GameConqueror Cheat Engine v Linuxe
Ako používať GameConqueror Cheat Engine v Linuxe
Tento článok obsahuje sprievodcu používaním cheatovacieho modulu GameConqueror v systéme Linux. Mnoho používateľov, ktorí hrajú hry v systéme Windows,...