Utilizzo della funzione di Sigazione C

Utilizzo della funzione di Sigazione C
Un sigaction () è una funzione che consente di chiamare/osservare o esaminare un'azione specifica associata a un particolare segnale. Si pensa che consideri una funzione di segnale e di sigicaggio nella stessa pagina. Ma in realtà non si è verificato. La funzione Signal () non blocca altri segnali quando l'esecuzione del gestore corrente è in corso. Allo stesso tempo, la funzione di sigazione può bloccare altri segnali fino a quando il gestore corrente non è tornato.

Sintassi

#includere
# INT SIGAction (int sig, const struct sigaction *__ limita__ new, struct sigaction *__ limit__ old);

La funzione di Sigazione esamina l'azione associata a un particolare segnale. Ora stiamo parlando degli argomenti nel parametro della funzione di Sigazione. Il primo è int 'sig', poiché il tipo di dati rivela che è un numero che si riferisce al segnale che viene già riconosciuto. La funzione di Sigazione imposta l'azione e la associa al segnale. L'argomento SIG che viene utilizzato deve essere in biblioteca.

La sigaretta struct costante è un puntatore che viene prima indicato come null. In tal caso, la funzione di Sigazione esamina l'azione definita attualmente per gestire SIG. Ciò non modificherà o annuonerà questa azione. E se il nuovo puntatore non viene definito valore nullo, indicherà una struttura di sigAction. L'azione identificata specificamente nella struttura della sigazione diventa quindi la nuova azione associata a SIG.

Il terzo argomento è Struttion Sigaction *Old It sottolinea l'indirizzo di memoria in cui la funzione di sigAction immagazzina la struttura di Sigazione. La funzione di Sigazione utilizza questo indirizzo di memoria per archiviare la struttura che descrive l'attività attualmente associata a SIG. Il vecchio valore può essere un valore nullo; In tal caso, la struttura di Sigazione non è archiviata come informazione.

Struttura di sigAction

Ora parleremo della struttura di Sigazione.

I membri presenti nella struttura sono menzionati qui.

Void (*) (int) sa_handler

È un puntatore della funzione e gestisce il segnale che si avvicina verso di essa. Il valore di questa funzione può mostrare l'azione predefinita o indicare il segnale da ignorare.

Maschera Sigset_t

Non possiamo usare il meccanismo di bloccare alcun segnale; Se Sa_mask ha usato i segnali di blocco, questi segnali verranno ignorati. La funzione Sigaction () non restituisce alcun errore.

Int sa_flags

Ci sono molte bandiere che influenzano il comportamento del segnale. Alcuni di loro sono spiegati qui.

_Sa_ignore

Questo è l'unico output e qualsiasi applicazione non può specificarlo.

Sa-Restart

Dice al sistema di ottenere le funzioni di riavvio della libreria se vengono interrotte da un segnale. Le funzioni su cui viene applicata questa funzione di riavvio sono quelle definite da essere interrotte dal segnale e quindi impostare errno su eintr che accetta (), pausa (), chiusura () e grande pausa () sono quelle funzioni che sono riavviabile se un segnale li interrompe.

Sa_siginfo

Questa funzione dice al sistema di utilizzare l'azione del segnale specificato da SA_SIGACTA. Quando il flag è spento e l'azione è influenzata dal segnale, la funzione di gestore del segnale specificato da SA_Handler viene invocata come funzione vuota (int sigio); Qui, Signor contiene che il numero del segnale ha generato il sistema.

Sa_sigaction

È un puntatore che indica la funzione assegnata per gestire il segnale. Questa funzione contiene tre parametri. Il primo include un numero intero di tipo contenente il segnale della funzione per essere invocato. Il secondo argomento è un tipo puntatore siginfo_t; Contiene ulteriori informazioni sulla sorgente del segnale. Il terzo è il "puntatore da vuoto.'

Implementazione della funzione di Sigazione

Abbiamo implementato i codici di Sigaction nel sistema operativo Linux. Utilizzare un editor di testo per scrivere il codice sorgente nel linguaggio di programmazione C; Per l'output del valore risultante, utilizzare il terminale Ubuntu compilando tramite un compilatore GCC. Che compila e quindi esegui il codice.

Esempio 1

Questo esempio contiene un elenco di librerie e . In questo esempio, una maschera di segnale viene utilizzata e impostata con Sigaction () per non chiamare l'altro gestore, specialmente quando un singolo gestore è in uso. La funzione del gestore del segnale contiene il sigillo come argomento.

L'ID processo viene visualizzato nel programma principale per garantire il lavoro. La sigAction è una struttura che descrive un gestore del segnale. Questo è il motivo per cui un gestore di segnale è contenuto. Viene utilizzata una maschera di segnale che mostra che ci dovrebbe essere il blocco di un segnale mentre la funzione di gestione del segnale è in esecuzione. Ora specificare la funzione del gestore del segnale quando si è verificato un segnale specificato.

# struct sigactact Act;
# atto.sa.Handler = $ Sighandler;

Successivamente, tutti i segnali vengono aggiunti al set di maschera del segnale. Tutti i segnali verranno bloccati quando le funzioni del gestore del segnale sono in esecuzione. Quando il nostro gestore del segnale di solito esiste, ripristina la maschera di segnale originale. Sa_restart riprenderà la funzione. Un gestore di segnale viene aggiunto a Sigint.

Dopo aver scritto il codice, compilalo utilizzando il compilatore nel terminale Ubuntu. “Sig.c ”è il nome di un file.

$ gcc -o sig. C
$./sig

All'esecuzione, è possibile vedere che l'ID di processo viene visualizzato per primo i cui segnali devono essere bloccati. Il messaggio visualizzato significa che la funzione restituirà un valore positivo.

Esempio 2

Ora considera un altro esempio, in cui la prima parte dell'esempio determina se il segnale Sigchld è attualmente in fase di ignoranza. Usando un puntatore nullo per un nuovo argomento, il gestore del segnale corrente non viene modificato. Il programma principale contiene l'istruzione IF per utilizzare la funzione di sigAction; Se il valore restituito è -1, significa che il bambino viene ignorato. E nell'altra parte, se il valore restituito è il segnale stesso. Significa che il bambino viene inadempiente.

Durante l'esecuzione, vedrai che il bambino è inadempiente.

Esempio 3

Questo esempio contiene la stessa funzionalità del secondo esempio, ma vengono anche aggiunte alcune funzionalità aggiuntive. Come si aggiunge un nuovo gestore in questa funzione tramite Sigaction.

Conclusione

L'articolo "Utilizzo della funzione di sigAction" contiene il funzionamento della funzione e una descrizione dettagliata dei suoi parametri negli argomenti. La sigAction svolge un ruolo vitale nel bloccare quei segnali che non sono riconosciuti o provenienti da hacker. Ecco perché la maggior parte dei programmatori preferisce che le funzioni di Sigaction vengano utilizzate nei programmi. SA_FLAG è un argomento essenziale della funzione di sigAction, quindi abbiamo spiegato alcune flag importanti con funzionalità di base. Il sistema operativo Linux si applica per un ruolo importante nell'implementazione della funzione di sigAction nel linguaggio di programmazione C. Questa guida mira a spiegare le caratteristiche di Sigazione e la struttura progettata per colpire i segnali che si avvicinano.