C Programmeerimine

C-programmeerimisega POSIX-signaalid

C-programmeerimisega POSIX-signaalid
Võime määratleda signaali kui tegevust, mis käivitatakse teatava olulise olukorra saabumise ajal toimingu või lõime hoiatamiseks. Alati, kui protseduur või lõim signaali kinnitab, peatab protseduur või lõim kõik, mida ta teeb, ja võtab viivitamatult meetmeid. Protsessidevahelisel koordineerimisel võib signaal olla tõhus. Selles juhendis uurite Linuxi signaalkäitlejaid C-keele kaudu.

Standard- või tavalised signaalid:

Päisefaili signaal.h '-le on makro konstandina määratud signaalid. Signaali pealkiri algas tähega “SIG” ja sellele eelneb lühike signaaliülevaade. Järelikult on igal signaalil selgelt arvuline väärtus. Programmi kood peaks kasutama signaali nime, mitte mitut signaali. Selle taga on see, et signaalide arv võib olenevalt süsteemist olla erinev, kuid nimede tõlgendamine on standardne. Allpool on mõned tavalised signaalid, mille funktsionaalsus on määratletud.

SIGHUP:

See signaal katkestab töötlemise. Signaal SIGHUP edastatakse kasutajaterminali eraldumise tähistamiseks, tõenäoliselt kaugside katkemise või üles riputamise tõttu.

SIGINT:

See häirib protsessi. Signaal SIGINT võetakse vastu alati, kui kasutaja sisestab INTR-klahvi (tavaliselt Ctrl + C).

SIGQUIT:

See peatab töötlemise või lõpetab selle. Signaal SIGQUIT võetakse vastu alati, kui kasutaja sisestab klahvi QUIT (tavaliselt Ctrl + \).

SIGILL:

See töötab siis, kui keelatud käsk on tehtud. Signaal SIGILL luuakse alati, kui üritatakse rämpsu või privilegeeritud käsku täita. Alati, kui virn on üle voolanud ja masinal on probleeme signaalikontrolleri käitamisega, võidakse luua ka SIGILL.

SIGTRAP:

Seda nimetatakse siis, kui käivitatakse mõni jälituspüüdmise käsk. SIGTRAP-signaali loovad katkestuspunkti käsk ja teine ​​lõksu käsk. Silur kasutab sellist signaali.

SIGABRT:

Seda nimetatakse signaaliks Katkesta. Signaal SIGABRT luuakse abort () meetodi kutsumisega. Sellist signaali kasutatakse ebatäpsuse märkimiseks, mida kood ülalnimetas ja mille meetodi Abort () abil kutsus.

SIGFPE:

Erand ujuvpunktide kohta; SIGFPE signaal tekib katastroofilise matemaatilise vea ilmnemisel.

SIGUSR1 ja SIGUSR2:

Signaale SIGUSR1 ja SIGUSR2 saab kasutada nii, nagu teile meeldib. Protsessidevahelise lihtsa suhtluse jaoks on kasulik luua signaalihaldur selliste signaalide jaoks rakenduses, mis signaali saab.

Signaalide vaikekäitumine:

Iga signaali kohta on tavapärane käitumine või toiming ning käitlejafunktsiooni abil on võimalik vaikekäitumist reguleerida. Automaatse signaali SIGKILL ja SIGABRT käitumist ei saanud muuta ega tähelepanuta jätta.

Termin: See lõpetab toimingu.

Tuum: Luuakse põhiline prügidokument ja toiming lõpetatakse.

Ign: Protsess jätaks signaali tähelepanuta.

Peatus: See peatab operatsiooni.

Cont: Operatsiooni peatamine jätkub.

Signaali käitlemine:

Protsess eelistab signaali käitumist selle kinnitamisel. Protsess võib käituda järgmiselt:

Kui määratletud signaalikäitumine jääb tähelepanuta, lükatakse signaal automaatselt välja.

Kasutades selliseid meetodeid nagu signaal või signaal, võib kood registreerida käitleja funktsiooni. Seda nimetatakse käitleja käest signaali püüdmiseks.

Kui signaali ei ravita ega jäeta tähelepanuta, võib toimuda standardne toiming.

Signaali käitlemise funktsiooni saate määratleda järgmiselt:

$ Int signaal () int signum, tühine (* funk) (int))

Kui töötlemine saab signaali signaali, võib signaali () meetod kutsuda funktsiooni func. Signal () taastab kursori funktsiooni func korral, kui see on edukas või erand tagastatakse selle asemel errno ja -1.

Funktsioonil „func“ on kolm väärtust:

SIG_DFL: See on päises määratletud standardse meetodi SIG DFL () kursor.h dokument, mida kasutatakse signaali tavapärase käitumise saamiseks.

SIG_IGN: See on viide päises täpsustatud meetodile SIG IGN () ignoreerimine.h dokument.

Kasutaja määratud käitleja meetodi kursor: Kasutaja määratud käitleja meetodi tüüp void (*) (int) tähendab, et tagastuskategooria on tühine ja üksik argument on int.

Loo uus fail 'signaal.c 'ja kirjuta sinna signaalkäitleja kood.

Linkige signaal.c fail gcc-ga.

Signaali käitamise ajal.c fail, meil on lõputu tsükkel, mis toimub põhimeetodil. CTRL + C vajutamisel käivitas see käitleja meetodi ja peamise meetodi käivitamine peatus. Põhimeetodi töötlemine jätkus pärast käitleja meetodi lõpuleviimist. Kui vajutate klahvi Ctrl + \, sulgeb toiming.

Signaali ignoreerimine:

Signaali vaatamiseks looge failisignaal.c 'ja kirjuta sinna koodi alla.

Siduge ignoreerimine.c fail gcc-ga.

Käivitage signaal.c fail. Puudutage klahve CTRL + C, luuakse signaal SIGNIT; sellest hoolimata on käitumine märkamatu, kuna käitleja meetod loendatakse meetodile SIG_IGN ().

Signalinkäsitleja uuesti registreerimine:

Signaalkäitleja uuesti registreerimiseks looge uus fail 'rereg.c 'ja sisestage sinna järgmine kood:

Seosta rereg.c fail gcc-ga.

Käivitage regeg.c fail. Esmakordselt klahvikombinatsiooni CTRL + C käitleja tõstmisel tõsteti signaalikäitleja uuesti SIG_DFL-i. Vajutades uuesti klahvikombinatsiooni CTRL + C, lõpetati käivitamine.

Signaalide saatmine tõstmise () abil:

Loo fail 'saada.c 'ja lisage allolev kood. Signaalide saatmiseks helistamismeetodile kasutatakse tõstmise () meetodit.

Seostage saatmine.c fail gcc-ga.

Protsess kasutab SIGUSR1 signaali iseseisvalt edastamiseks tõusu () meetodit.

Saada signaale Kill () abil:

Lisage allpool kood tõstmiseks.c '. Protsessirühmale signaalide saatmiseks kasutage tapmismeetodit ().

Link tõstmine.c fail gcc-ga.

Meetodi kill () abil suunab protsess SIGUSR1 signaali ülalnimetatule.

Vanemate ja laste suhtlemine:

Vanemate ja lapse suhtlemise jälgimiseks kirjutage faili allolev kood.

Siduge komm.c fail gcc-ga.

Fork () / meetod genereerib lapse, taastab lapse protsessi nulli ja lapsevanema ID.

Järeldus:

Selles juhendis oleme näinud, kuidas luua, käsitseda, saata, ignoreerida, uuesti registreerida ja kasutada signaali protsessidevaheliseks suhtlemiseks Linuxis.

Rakenduse AppyMouse ekraanipaneel ja hiirekursor Windowsi tahvelarvutitele
Tahvelarvutite kasutajad tunnevad hiirekursorit sageli puudust, eriti kui neil on kombeks sülearvuteid kasutada. Puutetundliku ekraaniga nutitelefonid...
Hiire keskmine nupp ei tööta Windows 10-s
The hiire keskmine nupp aitab teil sirvida pikki rohke andmega veebisaite ja ekraane. Kui see peatub, siis lõpuks kasutate kerimiseks klaviatuuri, mis...
Kuidas muuta hiire vasakut ja paremat nuppu Windows 10 PC-s
On üsna tavaline, et kõik arvutihiirte seadmed on ergonoomiliselt mõeldud parempoolsete kasutajate jaoks. Kuid on olemas hiire seadmeid, mis on spetsi...