C Programmazione

Come utilizzare Seleziona chiamata di sistema in C

Come utilizzare Seleziona chiamata di sistema in C
La chiamata di sistema select() consente a un sistema di tenere traccia di diversi descrittori di file. Quindi, la chiamata di sistema select attende che uno dei descrittori o un intero risulti “pronto” per un particolare tipo di attività di I/O (es.g., ingresso possibile). Se il successivo processo di I/O (e.g., read(2)) può essere eseguito nonostante il blocco, il descrittore di file è ritenuto in grado. Il metodo select() descrive se un descrittore di documento è disponibile per la lettura, preparato per la scrittura o in uno stato di eccezione. Supponiamo che la situazione dichiarata sia falsa per tutti i descrittori di file indicati. In tal caso, i blocchi delle chiamate di sistema select() prima delle circostanze menzionate sono validi per almeno uno dei descrittori di documento indicati, pari all'intervallo di timeout indicato.

Esempio per Seleziona chiamata di sistema:

Facciamo un semplice esempio per verificare il funzionamento della chiamata di sistema selezionata. Apri la shell della riga di comando usando "Ctrl+Alt+T.” Dopo l'apertura del terminale, assicurati di avere un compilatore di linguaggio C installato sul tuo sistema perché il codice non funzionerà senza di esso. Se non ne hai uno, prova il comando seguente per farlo.

$ sudo apt install gcc

Se vuoi vedere la chiamata di sistema di selezione di Linux funzionante, devi avere il pacchetto manpages-dev installato sul tuo sistema secondo il comando seguente. Scrivi la tua password utente per continuare.

$ sudo apt install manpages-dev

Puoi vedere la sintassi e il funzionamento della chiamata di sistema selezionata usando il comando "man" sottostante.

$ uomo 2 seleziona

La pagina man di output per la chiamata di sistema selezionata è mostrata di seguito. Uscire premendo il tasto "q".

Le directory standard, il terminale della shell di comando e le applicazioni pseudo-terminali, i documenti centrati su STREAMS, le FIFO, incluse le pipe, sono tutti supportati dal modulo select(). L'attività di select() sui descrittori di documenti che fanno riferimento a questi altri formati di file è sconosciuta. Quindi di seguito è la spiegazione della chiamata di sistema Select.

La descrizione della sintassi mostrata nell'immagine sopra è descritta di seguito.

Sopra c'è la libreria da includere nel codice C durante l'utilizzo della chiamata di sistema select. Se non è incluso, il codice non funziona.

Il nfds l'istruzione definisce il set di descrittori di file che verrà valutato. Il metodo select() controlla i descrittori di file tra 0 e nfds-1.

Mentre readfds non è nullo, si riferisce a un array del modulo fd_set che definisce quali descrittori di documento devono essere testati per la disponibilità alla lettura in input e quali descrittori di documento devono essere impostati per la lettura in output.

Quando il writefds il parametro non è vuoto, si riferisce a un'entità della forma fd_set che definisce quali descrittori di documento dovrebbero essere testati per la prontezza a inscrivere sull'input. I descrittori del documento dovrebbero essere preparati per comporre in output.

Mentre il errorfds il parametro non è vuoto, fa riferimento ad un oggetto di tipo fd_set, che determina quali descrittori di documento devono essere testati per attendere lo stato di errore in input; inoltre, i descrittori del documento dovrebbero essere verificati in uscita.

I parametri readfds, writefds e errorfds vengono aggiornati dopo il completamento per indicare che i descrittori del documento sono preparati per essere letti, completamente preparati per la scrittura o addirittura hanno uno stato di eccezione in attesa, di conseguenza. Se il bit successivo è fisso sull'input e la situazione rilevante è valida per ogni descrittore di file un po' sotto nfds, il bit successivo verrebbe posizionato sull'effettiva realizzazione.

Sebbene il parametro timeout non sia realmente vuoto, porta a un'entità temporale della struttura che determina il tempo supremo per trattenere il fuoco affinché la scelta finisca. Select() non ostruisce del tutto se tale parametro di timeout porta a un oggetto timeval della struttura con 0 elementi. Select() si interrompe a meno che un'occorrenza non consenta di recuperare uno dei filtri con un risultato vero (diverso da zero), indipendentemente dal fatto che l'istruzione di timeout sia un riferimento vuoto. Select() ha successo in modo efficace e produce 0 quando il periodo di attesa termina anche prima che si verifichi l'occorrenza, il che potrebbe richiedere l'adeguamento di una delle numerose maschere a un valore diverso da zero.

Questa macro elimina la raccolta (cancella tutti i descrittori del documento). Può essere usato come la prima mossa nell'inizializzazione di una raccolta di descrittori di documenti.

Il descrittore del documento fd viene aggiunto alla raccolta da questa macro. L'utilizzo di un descrittore di documento per una raccolta che è già esistita non sarebbe operativo e quindi non si tradurrebbe in un errore di eccezione.

Il descrittore del documento fd viene rimosso dalla raccolta da questa macro. Un descrittore di file eliminato dalla raccolta che non esiste non è operativo e quindi non comporta un'eccezione.

La chiamata di sistema select() altera le informazioni o i dati delle collezioni secondo le regole sopra menzionate. La macro FD ISSET() può essere eliminata invocando select() per vedere se un descrittore di documento rimane disponibile in una raccolta.

Creiamo un nuovo file di tipo C chiamato “new.c" come sotto.

$ nano nuovo.c

L'editor GNU è stato aperto. Scrivi il codice sottostante in esso. Il codice contiene intestazioni, funzione principale con alcuni descrittori di file come elaborato sopra. Contiene anche una struttura per il valore dell'intervallo di tempo. Quindi abbiamo utilizzato la chiamata di sistema select per verificare l'errore nell'istruzione "if". Premi "Ctrl+S" per salvare questo codice e "Ctrl+X" per uscire dall'editor.

Ora compila il codice usando l'istruzione "gcc".

$ gcc nuovo.c

Esegui il codice e non aggiungere alcun input. L'output dirà "seleziona timeout"."

$ ./un.su

Di nuovo, esegui il codice e dai un input nel terminale, e.g., “Aqsa." Verrà visualizzato che i "dati sono disponibili"."

Conclusione:

Abbiamo implementato la chiamata di sistema select su Ubuntu 20.04 Sistema Linux. Il codice dovrebbe funzionare equamente e correttamente su tutte le distribuzioni di Linux. Spero che questo articolo sia facile da implementare e capire.

Come utilizzare Xdotool per stimolare i clic del mouse e le sequenze di tasti in Linux
Xdotool è uno strumento da riga di comando gratuito e open source per simulare i clic del mouse e le sequenze di tasti. Questo articolo tratterà una b...
I 5 migliori mouse per computer ergonomici per Linux
L'uso prolungato del computer provoca dolore al polso o alle dita?? Soffri di rigidità articolare e devi continuamente stringerti la mano? Senti un do...
Come modificare le impostazioni del mouse e del touchpad utilizzando Xinput in Linux
La maggior parte delle distribuzioni Linux viene fornita con la libreria "libinput" per impostazione predefinita per gestire gli eventi di input su un...