Funzione epoll 7 c

Funzione epoll 7 c
La lingua C è una lingua molto vasta quando si tratta dell'uso di diverse tecnologie o API. È anche molto utilizzabile quando vogliamo utilizzare la programmazione socket. Proprio in questo modo, viene fornito con le funzioni di Epoll 7. Il sondaggio (2) e l'API EPOLL osservano entrambi i vari descrittori di documenti per determinare se I/O è fattibile su ognuno di essi. L'API EPOLL si estende molto bene con il gran numero di descrittori di documenti monitorati e può essere utilizzata come gateway errata o prompt di bordo.

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.

  • Elenco degli interessi: Il gruppo di interesse, noto anche come Epoll Collection, è la raccolta di descrittori di documenti che la procedura ha indicato che è interessato a tenere traccia di. La raccolta di descrittori di documenti che sembrano essere "pronti" per I/O è conosciuta come la coda di tutto set.
  • Elenco pronto: La raccolta di identificatori di documenti che sono "preparati" per l'I/O è noto come "Elenco pronto."Gli identificatori del documento nell'elenco degli interessi sono un sottogruppo di (o, più correttamente, una raccolta di puntatori per) l'elenco pronto. Il kernel utilizza le operazioni I/O su tali descrittori di documenti per riempire periodicamente l'elenco pronto.

Le seguenti funzioni di sistema sono disponibili per la costruzione e l'amministrazione di un oggetto EPOLL:

  • EPOLL_CREATE (2): la funzione EPOLL Crea (2) avvia una nuova istanza del servizio EPOLL e restituisce un descrittore di file. (L'EPOLL CATE1 più moderno1 (2) si espande su EPOLL Create (2) (Capacità).)
  • EPOLL_CTL (2): contribuisce alle cose all'elenco di interesse dell'oggetto EPOLL e viene quindi utilizzato per iscrivere l'interesse a specifici descrittori di documenti.
  • EPOLL_WAIT (2): se al momento non ci sono attività I/O presenti, Epoll Wait (2) blocca il thread che lo chiamava. (Questa chiamata di sistema può essere visualizzata come raccogliere cose dall'elenco pronto dell'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:

  1. Il lato di lettura del descrittore di documenti di una pipa (RFD) è iscritto all'oggetto EPOLL.
  2. Un totale di contenuto di 2 kb che viene scritto sul muro di scrittura del contenitore da un autore di tubi.
  3. Viene effettuata una richiesta di attesa di epoll (2) e viene restituita RFD, un manico di file preparato.
  4. Dall'RFD, il lettore di pipeline leggerà 1 kilobyte di contenuto.
  5. Viene effettuata una chiamata di funzione epoll_wait (2).

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):

  • Descrittori di documenti non bloccanti e
  • Subito dopo aver letto (2) o scrivere (2), consegna Eagin aspettando un'azione.

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.