L'entità Epoll, un modello di informazione in-kernel che può essere visto dallo spazio utente come un involucro per due set, funge da idea fondamentale dell'API EPOLL. All'interno di questa guida, discuteremo l'uso della funzione Epoll nella lingua C.
Le seguenti funzioni di sistema sono disponibili per la costruzione e l'amministrazione di un oggetto EPOLL:
Innescato a livello e innescato a bordo
I comportamenti innescati (ET) e innescati a livello (LT) sono entrambi possibili per l'interfaccia di circolazione degli incidenti EPOLL (LT). Le differenze dei due metodi possono essere riassunte come segue. Supponiamo che i seguenti trasformi:
La richiesta a EPOLL_WAIT (2) effettuata nel passaggio 5 probabilmente si bloccherà se la maniglia del documento RFD è stata assegnata al protocollo EPOLL con il segnale EPOLLET (TRIGGERG). Nel frattempo, il partner remoto potrebbe anticipare una reazione a seconda del contenuto già fornito. Questo perché l'opzione innescata dal bordo invia solo segnali ogni volta che il descrittore di documenti osservato subisce modifiche.
Pertanto, la funzione chiamante potrebbe anche essere sospesa per alcune informazioni che sono già nella cache del buffer nella fase 5. Nell'esempio di cui sopra, la scrittura in 2 può innescare un'attività da creare sull'RFD e l'incidente verrà ricevuto in 3. La chiamata a epoll_wait (2) al passaggio 5 può rimanere bloccata perché l'attività di lettura al passaggio 4 non ha utilizzato tutte le informazioni del buffer.
Per impedire a una lettura o scrittura di stallo di esaurire un lavoro che gestisce i vari descrittori di file, un programma che utilizza l'opzione Epollet dovrebbe utilizzare i descrittori di documenti non bloccanti. Di seguito è riportata una procedura consigliata per l'utilizzo dell'EPOLL come interfaccia TRIGGERD (EPOLLET):
Epoll, d'altra parte, è solo una versione più rapida del sondaggio (2) e può essere usato ovunque il sondaggio (2) viene utilizzato poiché ha la logica identica ogni volta che viene visto come un protocollo attivato a livello (lo standard ogni volta che Epollet è non data). La funzione chiamante ha la scelta di fornire il segnale EPOLLONESHOT per istruire l'epoll di chiudere il descrittore dei file collegati quando si riceve un evento con EPOLL_WAIT. Nel frattempo, anche con Epoll innescato a Edge, molte azioni possono essere create al momento della ricezione delle diverse serie di informazioni (2). Il chiamante deve davvero ridistribuire il descrittore di documenti con EPOLL_CTL (2) e ePoll_ctl_mod ogni volta che viene fornito il flag epolloneshot.
Esempio:
Sebbene la logica di Epoll quando usata come API di soglia sia identica a quella del sondaggio (2), l'uso del comportamento innescato dal bordo richiede una maggiore spiegazione per impedire i ritardi nella coda dell'evento del programma. L'ascoltatore in questa illustrazione è una presa non bloccante su cui viene invocata la funzione di ascolto (2). Prima che EAGAIN venga fornito dalla funzione Read (2) o Write (), il metodo utilizza la funzione FD () per mantenere il nuovo descrittore di file pronto (2). Un'app di macchine a stato basata su eventi potrebbe anche salvare il suo stato attuale dopo aver ricevuto Eagin in modo che possa riprendere a leggere o scrivere nel punto precedente quando FD () viene chiamato di nuovo. Dai un'occhiata al codice apposto qui:
Al fine di migliorare l'efficienza, il descrittore di file può essere aggiunto solo una volta all'interno dell'interfaccia EPOLL (EPOLL CTL ADD) designando (EPOLLIN | EPOLLOUT) come interfaccia innescata a bordo. Eseguindo EPOLL CTL (2) con EPOLL CTL Mod, è possibile evitare il costante spostamento tra EPOLLIN ed EPOLLOUT. Il codice rimanente per questa illustrazione è aggiunto nella seguente immagine:
Conclusione:
Si tratta dell'uso della funzione Epoll 7 C in Ubuntu 20.04 Sistema operativo Linux per eseguire la programmazione di socket. Abbiamo discusso di come una funzione EPOLL () 7 C può essere utilizzata per verificare la fattibilità dei vari descrittori di file per determinare se l'input e l'output che contengono sono vitali o meno, sia dal server che dal lato client.