C Programmation

Comment utiliser Select System Call en C

Comment utiliser Select System Call en C
L'appel système select() permet à un système de garder une trace de plusieurs descripteurs de fichiers. Ainsi, l'appel système select attend que l'un des descripteurs ou un tout se révèle « prêt » pour un type particulier d'activité d'E/S (par ex.g., saisie possible). Si le processus d'E/S suivant (e.g., read(2)) peut être effectué malgré le blocage, le descripteur de fichier est réputé capable. La méthode select() décrit si un descripteur de document est disponible pour la lecture, préparé pour l'écriture ou dans un état d'exception. Supposons que la situation indiquée soit fausse pour tous les descripteurs de fichiers indiqués. Dans ce cas, les blocs d'appel système select() avant les circonstances mentionnées sont valides pour au moins un des descripteurs de document indiqués, égal à l'intervalle de temps d'attente indiqué.

Exemple pour l'appel système sélectionné :

Ayons un exemple simple pour vérifier le fonctionnement de l'appel système sélectionné. Ouvrez le shell de ligne de commande en utilisant le "Ctrl+Alt+T.” Après l'ouverture du terminal, assurez-vous d'avoir un compilateur en langage C installé sur votre système car le code ne fonctionnera pas sans lui. Si vous n'en avez pas, essayez la commande ci-dessous pour le faire.

$ sudo apt installer gcc

Si vous voulez voir fonctionner l'appel système Linux select, vous devez avoir le package manpages-dev installé sur votre système selon la commande ci-dessous. Écrivez votre mot de passe utilisateur pour continuer.

$ sudo apt install manpages-dev

Vous pouvez voir la syntaxe et le fonctionnement de l'appel système select en utilisant la commande "man" ci-dessous.

$ homme 2 sélectionner

La page de manuel de sortie pour l'appel système sélectionné est affichée ci-dessous. Quittez-le en appuyant sur la touche « q ».

Les répertoires standard, les applications de terminal de shell de commande et de pseudo-terminal, les documents centrés sur STREAMS, les FIFO, y compris les tuyaux, sont tous pris en charge par le module select(). L'activité de select() sur les descripteurs de documents faisant référence à ces autres formats de fichiers est inconnue. Voici donc l'explication de l'appel système Select.

La description de la syntaxe montrée dans l'image ci-dessus est décrite ci-dessous.

Ci-dessus se trouve la bibliothèque à inclure dans le code C lors de l'utilisation de l'appel système select. S'il n'est pas inclus, le code ne fonctionne pas.

le nfds L'instruction définit l'ensemble de descripteurs de fichier qui sera évalué. La méthode select() vérifie les descripteurs de fichiers entre 0 et nfds-1.

Pendant que readfds n'est pas nul, il fait référence à un tableau de la forme fd_set qui définit quels descripteurs de document doivent être testés pour être prêts à lire en entrée et quels descripteurs de document doivent être tous définis pour être lus en sortie.

Quand le écriturefds le paramètre n'est pas vide, il fait référence à une entité de la forme fd_set qui définit quels descripteurs de document doivent être testés pour être prêts à s'inscrire en entrée. Les descripteurs de document doivent être prêts à composer sur la sortie.

Tandis que le errorfds le paramètre n'est pas vide, il fait référence à un objet du genre fd_set, qui détermine quels descripteurs de document doivent être testés pour attendre l'état d'erreur en entrée ; aussi, les descripteurs de documents doivent être vérifiés à la sortie.

Les paramètres readfds, writefds et errorfds sont mis à jour après accomplissement pour signifier que les descripteurs de document sont préparés pour avoir lu, entièrement préparés pour l'écriture, ou même ont un état d'exception en attente, en conséquence. Si le bit suivant est fixe en entrée et que la situation pertinente est valable pour chaque descripteur de fichier un peu en dessous de nfds, le bit suivant serait placé sur l'accomplissement effectif.

Bien que le paramètre de délai d'attente ne soit pas vraiment vide, il conduit à une entité temporelle de structure qui détermine le temps suprême pour retenir votre feu pour que le choix se termine. Select () n'obstrue pas tout à fait si un tel paramètre de délai d'attente conduit à un objet structure timeval avec 0 élément. Select() s'arrête à moins qu'une occurrence ne permette à l'un des filtres d'être récupéré avec un résultat vrai (non nul), que l'instruction de délai d'attente soit une référence vide. Select () réussit efficacement et produit 0 lorsque la période d'attente se termine avant même que l'occurrence ne se produise, ce qui peut nécessiter l'ajustement de l'un des plusieurs masques à une valeur non nulle.

Cette macro élimine la collection (efface tous les descripteurs du document). Il peut être utilisé comme le tout premier pas dans l'initialisation d'une collection de descripteurs de documents.

Le descripteur de document fd est ajouté à la collection par cette macro. L'utilisation d'un descripteur de document à une collection qui a déjà existé serait non opérationnelle et n'entraînerait donc pas d'erreur d'exception.

Le descripteur de document fd est supprimé de la collection par cette macro. Un descripteur de fichier éliminé de la collection qui n'existe pas est non opérationnel et ne donne donc pas lieu à une exception.

L'appel système select() modifie les informations ou les données des collections selon les règles mentionnées ci-dessus. La macro FD ISSET() peut être supprimée en appelant select() pour voir si un descripteur de document reste disponible dans une collection.

Créons un nouveau fichier de type C nommé « nouveau.c" comme ci-dessous.

$ nano nouveau.c

L'éditeur GNU a été ouvert. Écrivez le code ci-dessous dedans. Le code contient des en-têtes, une fonction principale avec quelques descripteurs de fichiers comme expliqué ci-dessus. Il contient également une structure pour la valeur de l'intervalle de temps. Ensuite, nous avons utilisé l'appel système select pour vérifier l'erreur dans l'instruction "if". Appuyez sur "Ctrl+S" pour enregistrer ce code et "Ctrl+X" pour quitter l'éditeur.

Compilez maintenant le code en utilisant l'instruction "gcc".

$ gcc nouveau.c

Exécutez le code et n'ajoutez aucune entrée. La sortie indiquera « select timeout."

$ ./une.en dehors

Encore une fois, exécutez le code et donnez une entrée dans le terminal, e.g., « Aqsa." Il affichera que les " données sont disponibles."

Conclusion:

Nous avons implémenté l'appel système select sur Ubuntu 20.04 Système Linux. Le code devrait fonctionner sur toutes les distributions de Linux de manière égale et correcte. J'espère que vous trouverez cet article facile à mettre en œuvre et à comprendre.

Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...
Comment utiliser AutoKey pour automatiser les jeux Linux
AutoKey est un utilitaire d'automatisation de bureau pour Linux et X11, programmé en Python 3, GTK et Qt. En utilisant ses fonctionnalités de script e...
Comment afficher le compteur FPS dans les jeux Linux
Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...