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 selezionata attende che uno dei descrittori o un insieme si rivelano "pronto" per un particolare tipo di attività I/O (E.G., Ingresso possibile). Se il successivo processo I/O (E.G., Leggi (2)) può essere eseguito nonostante il blocco, il descrittore di file è considerato capace. Il metodo Select () descrive se un descrittore di documenti è disponibile per la lettura, preparato per la scrittura o in uno stato di eccezione. Supponiamo che la situazione dichiarata sia falsa per i descrittori di file interamente dichiarati. In tal caso, i blocchi di chiamata di sistema select () prima delle circostanze menzionate sono validi per almeno uno dei descrittori di documenti dichiarati, pari all'intervallo dichiarato di timeout.

Esempio per selezionare la chiamata di sistema:

Facciamo un semplice esempio per verificare il funzionamento di Select System Call. 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 essa. Se non ne hai uno, prova il comando seguente per farlo.

$ sudo APT Installa GCC

Se si desidera visualizzare il funzionamento della chiamata di sistema Linux Select, è necessario avere il pacchetto MANPAGES-DEV installato sul sistema secondo il comando seguente. Scrivi la password dell'utente per continuare.

$ sudo apt install manpages-dev

Puoi vedere la sintassi e il funzionamento della chiamata di sistema selezionati utilizzando il comando "Man" di seguito.

$ man 2 Seleziona

La pagina del man output per la chiamata di sistema selezionata è mostrata di seguito. Smettila premendo il tasto "Q".

Le directory standard, il terminale di comando e le applicazioni pseudo-terminali, documenti centrati su flussi, FIFOS, compresi i tubi, sono tutti supportati dal modulo Select (). L'attività di select () sui descrittori di documenti che si riferisce a questi altri formati di file non è noto. Quindi di seguito è riportata la spiegazione della chiamata di sistema selezionata.

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

Sopra è la libreria da includere nel codice C durante l'utilizzo della chiamata di sistema Seleziona. 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 è null, si riferisce a una matrice di modulo fd_set che definisce quali descrittori di documenti dovrebbero essere testati per essere pronti a leggere input e quali descrittori di documenti dovrebbero essere tutti impostati per leggere su output.

Quando il writefds Il parametro non è vuoto, si riferisce a un'entità del modulo FD_SET che definisce quali descrittori di documenti dovrebbero essere testati per la prontezza da iscrivere all'ingresso. I descrittori del documento dovrebbero essere pronti a comporre sull'output.

Mentre il errori Il parametro non è vuoto, si riferisce a un oggetto di tipo FD_SET, che determina quali descrittori di documenti dovrebbero essere testati per in attesa di uno stato di affari di errore sull'input; Inoltre, i descrittori del documento devono essere verificati sull'output.

I parametri ReadFDS, WriteFDS e ERROWFDS vengono aggiornati dopo il risultato per indicare che i descrittori di documenti sono preparati per aver letto, completamente preparati per la scrittura o persino avere uno stato di eccezione in attesa, di conseguenza. Se il bit successivo è fissato sull'input e la situazione pertinente è valida per ogni descrittore di file un po 'ai sensi dell'NFDS, il bit successivo verrebbe posto su un risultato efficace.

Mentre il parametro timeout non è davvero vuoto, porta a un'entità Timeval struttura che determina il tempo supremo per mantenere il fuoco affinché la scelta di finire. Select () non ostruisce abbastanza se tale parametro timeout porta a un oggetto TimeVal Struttura con 0 elementi. Select () si arresta a meno che un evento non consenta di recuperare uno dei filtri con un risultato vero (diverso da zero), se l'istruzione timeout è un riferimento vuoto. Select () ha successo in modo efficace e produce 0 quando il periodo di attesa termina anche prima che si verifichi la presenza, il che potrebbe richiedere che una delle diverse maschere venga regolata a un valore diverso da zero.

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

Il descrittore di documenti FD viene aggiunto alla raccolta da questa macro. L'uso di un descrittore di documenti a una raccolta che esiste già non operativa e pertanto non si traduce in un errore di eccezione.

Il descrittore di documenti FD viene rimosso dalla raccolta da questa macro. Un descrittore di file eliminato dalla raccolta che non esiste non è operazionale e quindi non comporta un'eccezione.

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

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

$ nano nuovo.C

L'editor GNU è stato aperto. Scrivi il codice sottostante. Il codice contiene intestazioni, funzione principale con alcuni descrittori di file elaborati sopra. Contiene anche una struttura per il valore dell'intervallo di tempo. Quindi abbiamo utilizzato la chiamata di sistema Seleziona per verificare l'errore nell'istruzione "if". Premere "CTRL+S" per salvare questo codice e "Ctrl+X" da lasciare l'editor.

Ora compila il codice utilizzando le istruzioni "GCC".

$ GCC nuovo.C

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

$ ./UN.fuori

Ancora una volta, eseguire il codice e dare qualche input nel terminale, E.G., “Aqsa."Outputrà che i dati sono disponibili."

Conclusione:

Abbiamo implementato la chiamata di sistema selezionata su Ubuntu 20.04 Sistema Linux. Il codice dovrebbe funzionare su tutte le distribuzioni di Linux allo stesso modo e correttamente. Spero che tu trovi questo articolo facile da implementare e capire.