C programozás

POSIX jelek C programozással

POSIX jelek C programozással
A jelet olyan tevékenységként határozhatjuk meg, amely egy művelet vagy szál figyelmeztetésére szolgál, amikor egy bizonyos jelentős helyzetre az érkezési időpont érkezik. Amikor egy eljárás vagy egy szál nyugtázza a jelet, az eljárás vagy a szál leállítja bármit is, és azonnal intézkedik. A folyamatok közötti koordinációban a jel hatékony lehet. Ebben az útmutatóban a jelkezelőket fogja tanulmányozni Linux alatt a C nyelven keresztül.

Normál vagy normál jelek:

A fejlécfájl jelét.h 'jelek vannak megadva makroállandóként. A jel címe „SIG” -vel kezdődött, és egy rövid jeláttekintés előzi meg. Következésképpen bármelyik jelnek külön számértéke van. A programkódnak a jel nevét kell használnia, nem több jelet. Ennek oka az, hogy a jelek száma a rendszertől függően változhat, de a nevek értelmezése szabványos. Az alábbiakban néhány szabályos jelet definiálunk, amelyeknek a funkciói meg vannak határozva.

SIGHUP:

Ez a jel felfüggeszti a feldolgozást. A SIGHUP jelet a felhasználói terminál szétválasztásának jelzésére hívják fel, valószínűleg egy távoli kommunikáció megszakadása vagy letétele miatt.

JEL:

Megzavarja a folyamatot. A SIGINT jel akkor érkezik, amikor a felhasználó bevezeti az INTR kulcsot (általában Ctrl + C).

JELENLEG:

Leállítja vagy kilép a feldolgozásból. A SIGQUIT jel akkor érkezik, amikor a felhasználó megadja a QUIT gombot (általában Ctrl + \).

SIGILL:

Akkor fut, amikor tiltott parancs történt. A SIGILL jel akkor jön létre, amikor egy ócska vagy privilegizált parancs végrehajtására törekszenek. Amikor a verem túlcsordul, és a gépnek problémái vannak egy jelvezérlő futtatásával, akkor létrehozható a SIGILL is.

SIGTRAP:

Akkor hívják, amikor valamilyen nyomkövető utasítást hajtanak végre. A SIGTRAP jelet töréspont paranccsal és egy újabb csapda paranccsal hozzák létre. A hibakereső ilyen jelet használ.

SIGABRT:

Abort jelnek hívják. A SIGABRT jel az abort () metódus meghívásával jön létre. Egy ilyen jel arra szolgál, hogy rámutasson az abort () metódus által korábban említett és rögzített kód által észlelt pontatlanságra.

JELENTÉS:

Kivétel a lebegőpontokról; A SIGFPE jel akkor jön létre, amikor katasztrofális matematikai hiba történik.

SIGUSR1 és SIGUSR2:

A SIGUSR1 és SIGUSR2 jeleket tetszés szerint lehet használni. A folyamatok közötti egyszerű interakció szempontjából előnyös egy jelkezelő létrehozása az ilyen jelek számára abban az alkalmazásban, amelyik jelet kap.

A jelek alapértelmezett viselkedése:

Minden jelnél szokásos viselkedés vagy művelet van, és az alapértelmezett viselkedést a kezelő funkcióval lehet módosítani. Az automatikus SIGKILL és SIGABRT jel viselkedését nem lehetett módosítani vagy elhanyagolni.

Időtartam: Megszünteti a műveletet.

Mag: Létrejön egy alapdokumentum, és a művelet befejeződik.

Ign: A folyamat figyelmen kívül hagyna egy jelet.

Álljon meg: Megállítja a műveletet.

Cont: A műveletet a leállításától tartják fenn.

Jelkezelés:

A folyamat előnyben részesíti a jel viselkedését, amikor nyugtázzák. A folyamat a következőképpen viselkedhet:

A jel automatikusan elvetődik, ha figyelmen kívül hagyja a megadott jel viselkedését.

Olyan módszerek alkalmazásával, mint a jel vagy a jelzés, a kód regisztrálhat egy kezelő funkciót. Úgy hívják, hogy elkap egy jelet egy kezelőtől.

Ha egy jelet nem kezelnek vagy elhanyagolnak, a szokásos művelet történhet.

A Jelkezelés funkciót a következőképpen definiálhatja:

$ Int jel () int jelző, érvénytelen (* funk) (int))

Amikor a feldolgozás jeljelet kap, a jel () metódus hívhatja a „func” metódust. A Signal () visszaállítja a mutatót a „func” metódusra, ha ez virágzik, vagy kivételt ad vissza az errno és -1 helyett.

A „func” mutató három értékre képes:

SIG_DFL: Ez egy mutató a fejlécben definiált standard SIG DFL () metódusra.h a jel szokásos viselkedésének megismerésére használt dokumentum.

SIG_IGN: Ez egy hivatkozás a fejlécben megadott SIG IGN () ignore módszerre.h dokumentum.

Felhasználó által meghatározott kezelő módszer mutató: A felhasználó által definiált void (*) (int) típusú kezelő metódus azt jelenti, hogy a return kategória érvénytelen, és hogy a magányos argumentum int.

Hozzon létre egy új fájl jelet.c ', és írja alá a jelkezelő kódot.

Kapcsolja össze a jelet.c fájl a gcc-vel.

A jel futtatása közben.c fájlt, egy végtelen ciklust kapunk, amelyet a fő módszerrel hajtunk végre. A CTRL + C megnyomásakor elindította a kezelő módszert, és a fő módszer végrehajtása leállt. A fő módszer feldolgozása a kezelő módszer megvalósulása után is folytatódott. A Ctrl + \ megnyomásakor a művelet kilép.

Jel figyelmen kívül hagyása:

A jel figyelmen kívül hagyása érdekében hozzon létre egy fájl jelet.c ', és írja be a kód alá.

Kösse a figyelmen kívül hagyást.c fájl a gcc-vel.

Futtassa a jelet.c fájl. Érintse meg a CTRL + C billentyűkombinációt, létrejön a SIGNIT jel; mindazonáltal a viselkedés észrevétlen, mert a kezelő metódust SIG_IGN () metódusba soroljuk.

Újra regisztrálja a jelkezelőt:

A jelkezelő újraregisztrálásához hozzon létre egy új fájlt 'rereg.c 'és írja be az alábbi kódot:

Társítsa a rereget.c fájl a gcc-vel.

Futtassa a rereget.c fájl. Míg először megnyomta a CTRL + C kezelő módszert, a jelkezelő újra regisztrált a SIG_DFL-be. A CTRL + C ismételt megnyomása közben a végrehajtás leállt.

Jelek küldése az Emelés () használatával:

Hozzon létre egy fájlt.c 'és adja hozzá az alábbi kódot. Jelek küldéséhez a hívó módszerhez az emelés () metódust alkalmazzák.

Kapcsolja össze a küldést.c fájl a gcc-vel.

A folyamat a raise () metódust használja a SIGUSR1 jel önálló továbbítására.

Jelek küldése a Kill () használatával:

Adja hozzá az alábbi kódot az 'emeléshez.c '. A kill módszerrel () jeleket küldhet a folyamatcsoportnak.

Kapcsolja össze az emelést.c fájl a gcc-vel.

A kill () módszer alkalmazásával a folyamat a SIGUSR1 jelet a fent említettre irányítja.

Szülő-gyermek interakció:

A szülő-gyermek interakció megtekintéséhez írja be az alábbi kódot egy fájlba.

Kötelezze a komm.c fájl a gcc-vel.

A Fork () / method generálja a gyermeket, nulla értéket állít vissza a gyermek folyamatra, és a gyermek azonosítóját a szülőnek.

Következtetés:

Ebben az útmutatóban láthattuk, hogyan lehet létrehozni, kezelni, elküldeni, figyelmen kívül hagyni, újra regisztrálni és felhasználni a jelet a folyamatok közötti interakciókhoz a Linuxban.

Az Xdotool használata az egérkattintások és a billentyűleütések ösztönzéséhez Linux alatt
Az Xdotool egy ingyenes és nyílt forráskódú parancssori eszköz az egérkattintások és a billentyűleütések szimulálására. Ez a cikk egy rövid útmutatót ...
A top 5 ergonómikus számítógépes egértermék Linuxhoz
Hosszan tartó számítógép-használat okoz-e fájdalmat a csuklóján vagy az ujjain?? Merev ízületek szenvednek, és folyamatosan kezet kell rázniuk? Égő fá...
Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...