C Programmazione

Come utilizzare la chiamata di sistema Poll in C

Come utilizzare la chiamata di sistema Poll in C
La funzione poll() consente ai programmi di multiplexare input e output attraverso una serie di descrittori di file. In altre parole, la chiamata di sistema poll() è analoga alla chiamata di sistema select() in quanto mantiene il suo fuoco per uno dei numerosi descrittori di file diventando disponibile per l'I/O. Poll() esamina il descrittore del documento assegnato per elencare gli eventi negli incidenti a ogni elemento dell'array che punta ad esso tramite descrittori di file. Il metodo poll() può determinare su quale dei descrittori di file un programma leggerà o scriverà i dettagli, che hanno visto questi incidenti. In questa guida utilizzeremo Ubuntu 20.04 per comprendere passo dopo passo il concetto di chiamata di sistema poll() su Linux.

Sintassi:

int poll(struct pollfd *ufds, unsigned int nfds, int timeout);

L'argomento "fds" determina i descrittori del documento da controllare, nonché gli incidenti significativi per ogni. È un riferimento a un array che ha un elemento per ogni descrittore di documento aperto. Gli elementi dell'array sono strutture pollfd, dove fd denota un descrittore di documento aperto, e tutti gli happening e re-event, solitamente chiamati bitmask, sono generati creando una fusione dei flag di evento corrispondenti:

POLLINI:

Oltre ai dati ad alta priorità, i dati informativi possono essere letti senza nemmeno essere bloccati. Inoltre, se il messaggio di risposta è di dimensioni zero, questo segnale flag viene generato per gli STREAMS in revents. Questo flag ha lo stesso significato di POLLRDNORM | POLLRDBAND.

POLLRDNORM:

Senza interruzioni si possono leggere i normali dati informativi. Le informazioni sulla priorità primaria riguardano la banda 0 malgrado l'interruzione per i FLUSSI ST. E se il messaggio di risposta è di lunghezza zero, questo segnale viene generato in re-eventi.

BANDA DI POLLARD:

I dati della preoccupazione principale verranno letti nonostante eventuali ritardi. Le informazioni sugli intervalli di priorità maggiori di zero possono essere lette nonostante l'interferenza in STREAMS. E se la risposta del messaggio è di durata zero, questo segnale viene propagato in revents.

POLLPRI:

Potrebbero esserci alcune eccezioni al descrittore del documento. Le informazioni con priorità assoluta possono essere lette senza essere bloccate. Inoltre, se la risposta è di durata zero, questo segnale viene propagato per STREAMS in revents.

POLLOUT:

Gli utenti possono scrivere utilizzando il flag POLLOUT. Senza fermarsi, i dati tipici possono essere registrati. Le informazioni sulla banda di preferenza 0 possono essere registrate nonostante l'interruzione in FLUSSI.

POLLWRNORM:

Funziona come POLLOUT.

POLLWBAND:

I dati più prioritari verranno scritti usando questo flag. Le informazioni sugli intervalli di preferenza maggiori di zero per gli STREAM possono essere registrate senza essere bloccate. Questa attività valuta solo le bande che sono già state scritte almeno una volta poiché nessuna banda di preferenza è stata scritta su questo STREAM.

POLLER:

È una condizione di errore e si verifica solo quando il sistema o il flusso ha riscontrato un problema. Questo simbolo si applica solo alla maschera di bit revents; durante le attività partecipanti, è trascurato.

SONDAGGIO:

Specifica la condizione di riaggancio e si verifica solo quando la connessione al sistema è stata disabilitata. Questa occorrenza e POLLOUT sono ugualmente compatibili; una volta che è sorto un problema, un flusso non verrà mai scritto.

POLLNVAL:

Questo specifica la richiesta non valida o insolita. Questa attività, tuttavia, non esclude la partecipazione a POLLIN, POLLRDNORM, POLLRDBAND o POLLPRI. Questo simbolo si applica solo alla maschera di bit revents; è trascurato nel partecipante dell'evento.

Esempio di chiamata di sistema di sondaggio:

Svolge lo stesso ruolo di select(), sebbene su scala più ampia. Poll() è disponibile su qualsiasi macchina Linux basata su Glibc. I kernel più vecchi imitano poll() con select() in tutta la libreria C. Tuttavia, i programmi non dovrebbero aver bisogno di fare distinzioni. Ecco un esempio di come si sente poll(). Quindi apri prima il terminale della riga di comando usando il tasto di scelta rapida "Ctrl+Alt+T."Dopo averlo aperto, dobbiamo creare un file di tipo C per scrivere un codice di tipo C in esso. Per questo, abbiamo utilizzato l'editor nano. Quindi, prova il seguente comando nano nel terminale insieme al nome del file C.

$ nano nuovo.c

Ora è stato aperto l'editor nano per il file C "nuovo". Devi prima includere alcune librerie in esso, in particolare il "sondaggio".h” libreria. La funzione principale è stata specificata come avente un tipo restituito intero con due argomenti nel suo parametro, e.g., argc e argv. Quindi abbiamo dichiarato un descrittore di file fd e un array di tipi di caratteri chiamato "buf.” Successivamente, è stata definita una variabile di tipo struttura denominata pollfd pfds di dimensione 2. Successivamente, è stata dichiarata una chiamata di sistema aperta per ottenere il valore dall'array del tipo di carattere e assegnarlo al descrittore di file "fd" come mostrato nell'immagine. Mentre il descrittore di file è "1", la struttura "pfds" verrà aggiornata con alcuni dati al suo interno utilizzando il flag POLLIN al suo interno. Ora abbiamo definito una funzione di chiamata di sistema poll(). Il primo parametro della chiamata di sistema poll() è la struttura ufds usata nel codice. Il secondo parametro specifica il totale delle strutture pollfd nella serie fds.

E l'ultimo parametro mostra il valore di timeout del tipo intero per la chiamata di sistema di polling. Se i pfd sono revent e aggiunti con un valore 0, la chiamata di sistema read leggerà i dati dal buffer. L'istruzione "if" verrà utilizzata per verificare se l'istruzione di lettura ha restituito il suo valore a un numero intero e scrivere i dati. Se la struttura "pfds" è alla posizione "1" durante il revent e l'inserimento dei dati, la chiamata di sistema di lettura utilizzerà i dati da un buffer mentre si utilizza il descrittore "fd".

Salva il nuovo.c e chiudilo. Ora compilalo usando il compilatore gcc.

$ gcc nuovo.c

Durante l'esecuzione di questo codice, abbiamo aggiunto i dati in un sondaggio da leggere e riscrive i dati come nell'output seguente.

$ ./un.su

Conclusione:

In questo articolo sopra descritto, abbiamo discusso della chiamata di sistema poll() in linguaggio C. Spero che questo tutorial sia utile ed efficiente mentre lavori sul sistema operativo Linux.

Controlla e gestisci il movimento del mouse tra più monitor in Windows 10
Gestore mouse con doppio display ti consente di controllare e configurare il movimento del mouse tra più monitor, rallentando i suoi movimenti vicino ...
WinMouse ti consente di personalizzare e migliorare il movimento del puntatore del mouse su PC Windows
Se vuoi migliorare le funzioni predefinite del puntatore del mouse, usa freeware WinMouse. Aggiunge più funzionalità per aiutarti a ottenere il massim...
Il tasto sinistro del mouse non funziona su Windows 10
Se stai utilizzando un mouse dedicato con il tuo laptop o computer desktop ma il il tasto sinistro del mouse non funziona su Windows 10/8/7 per qualch...