Funzione segnale 2 c

Funzione segnale 2 c
I segnali sono un tipo vincolato di comunicazione tra processi (IPC) che vengono frequentemente utilizzati nei sistemi operativi conformi a Posix come Unix, simili a Unix e altri. Un evento asincrono o sincrono può essere annunciato a un processo che utilizza un segnale. L'esecuzione regolare del processo target viene interrotta dal sistema operativo quando viene fornito un segnale per consegnarlo. Se il processo ha già identificato un gestore del segnale, esegue quel programma. In assenza di ciò, viene utilizzato il gestore del segnale standard. C'è un valore intero per ciascun segnale. Le costanti nominate specificate in "Segnali.h "dovrebbe essere usato al posto dei valori numerici stessi.

Il sistema operativo invierà un segnale, che è un interrupt generato dal software, a un processo ogni volta che l'utente preme il tasto "CTRL-C" o quando un altro processo deve comunicare con il processo. Un processo può ricevere solo un certo set di segnali. I numeri interi fungono da identificatori per i segnali. I nomi simbolici sono assegnati ai numeri del segnale. Un segnale emesso al processo genitore quando il processo di un figlio termina è SIGCHLD, ad esempio.

Un segnale viene trasmesso a un processo, che imposta il bit rilevante nei segnali in sospeso del processo intero. Il sistema operativo esamina i numeri interi in sospeso e bloccato ogni volta che viene scelto un processo per eseguire su un particolare processore. Il processo viene ripreso correttamente e riprende l'esecuzione alla prossima istruzione se non ci sono segnali in sospeso. Quando uno o più segnali vengono interrotti, ma uno o più sono ancora in sospeso, la procedura viene anche continuata normalmente con i segnali ancora in corso come in sospeso. Se uno o più segnali non sono bloccati ma sono in corso, il sistema operativo chiama le funzioni di gestione del segnale nel codice del processo.

Sintassi della funzione del segnale in linguaggio C

La funzione del segnale della libreria C crea un gestore o funzione del segnale con il numero di segnale Sig. La dichiarazione della funzione Signal () è fornita nel seguente:

void (*segnale (int sig, void (*func) (int))) (int)


Discutiamo in dettaglio ciascuno dei parametri della funzione del segnale. Il "SIG" è il numero del segnale che ha una funzione di gestione ad esso associata. Ecco alcuni numeri di segnale standard cruciali:

Il sidabrt è definito come terminazione anormale del segnale come quella che viene avviata dalla funzione. Il SIGFPE viene definito un'eccezione a punto mobile del segnale che è un'operazione matematica impropria come una divisione per zero o un'operazione traboccante (non sempre utilizzando un'operazione a punta mobile.)

La sigill è il segnale illegale ed è un'istruzione non valida o un'immagine di funzione non valida. Di solito, uno sforzo per eseguire una corruzione di dati o codice è la colpa di questo. La Sigint è definita come un interrupt di segnale che è un segnale di attenzione interazionale. L'utente dell'applicazione è di solito quello che lo genera. SIGSEVG è l'abbreviazione della violazione della segmentazione del segnale e il suo accesso non autorizzato ai dati che si verificano quando il software tenta di leggere o scrivere i dati che non sono nella memoria che è stato assegnato ad esso.

Il SIGTERM è l'acronimo della risoluzione del segnale in cui il programma ha ricevuto una richiesta di risoluzione.

Un puntatore di funzione è rappresentato dal parametro "func". Una delle seguenti funzioni preimpostate può essere utilizzata qui o una funzione creata dal programmatore. SIG_DFL è la gestione del segnale per impostazione predefinita. Il segnale viene gestito dalla risposta predefinita per quel segnale specifico. Il sig_ign è il segnale ignorato. Il segnale è ignorato.
Esempio 1:

Ci sono varie routine standard di gestore di segnale disponibili. Ogni segnale ha una corrispondente routine di gestore predefinito. Le azioni comuni eseguite dalle varie procedure di gestore predefinite includono l'ignorare del segnale che significa non fare nulla e semplicemente tornare indietro. Il processo dovrebbe essere terminato. Continua rilasciando un processo bloccato. Fermare la procedura bloccandola. Questa istanza illustra il gestore del segnale predefinito nella lingua C:

#includere
#includere
#includere
#includere
#includere
#includere
void handle_sigint (int sig)

printf ("Handler Signal");

int main ()

segnale (Sigint, Handle_sigint);
mentre (1)

printf ("ciao a c lingua \ n");
sonno (1);

restituzione 0;

Insieme agli altri file di intestazione richiesti, abbiamo importato il "segnale.File di intestazione h ". Il segnale.Il file di intestazione h "contiene una definizione macro costante per i segnali. È costruita la funzione Handle_sigint che prende l'oggetto intero "sig". Abbiamo chiamato questa funzione all'interno della nostra funzione principale. La funzione principale ha utilizzato la chiamata della funzione del segnale e prende i due argomenti: il primo argomento è il sigint per l'interruzione del segnale e il secondo argomento è il manubrio_signint per lo scopo del gestore del segnale scopo. Il ciclo while è definito quale iterate sull'istruzione printf che visualizza i tempi di stringa infiniti "ciao a c" fino a quando l'utente preme il comando CTRL C.

La stringa è stampata infinita nell'output. Dopo aver ricevuto il segnale Sigint e utilizzando il proprio gestore predefinito per terminare il processo, l'utente può premere CTRL+C per terminare il processo.


Esempio 2:

Ad eccezione di Sigkill, un processo può utilizzare il suo codice gestore per sostituire il gestore di segnale predefinito praticamente tutti i segnali. Qualsiasi nome è accettabile per una funzione di gestore del segnale, ma deve avere un parametro int e un tipo di restituzione di vuoto. Il seguente codice di esempio è l'illustrazione di un gestore del segnale definito dall'utente:

#includere
#includere
void handle_sigint (int sig)

printf ("segnali catturati %d \ n", sig);

int main ()

segnale (Sigint, Handle_sigint);
while (1);
restituzione 0;

Dopo aver incluso il file di intestazione, inizia con il codice. Abbiamo definito la funzione di un gestore del segnale. Il parametro INT SIG viene passato alla funzione del gestore del segnale. Questa funzione è il gestore per Sigint e stampa l'istruzione del segnale catturato quando l'utente inserisce il comando "Ctrl+C". All'interno della funzione principale, abbiamo una chiamata del sistema di segnale che prende l'argomento Sigint e l'argomento Handle_Sigint.

Il programma andrà nel while loop e stampa il seguente output su ogni comando "ctrl+c":


Conclusione

Tutta questa guida ti istruisce sulla funzione del segnale in C. Abbiamo superato un'introduzione ai segnali in C, insieme a una struttura di segnali e ai loro esempi corrispondenti. Quando si tratta di affrontare le interruzioni non pianificate che si verificano durante l'esecuzione di un programma durante il tempo di esecuzione, il comando del segnale del linguaggio C è cruciale. Poiché funge da segnale per l'utente e può rilevare errori durante l'esecuzione del programma, la funzione del segnale può gestirli con facilità.