Comment utiliser SELECT System Call en C

Comment utiliser SELECT System Call en C
L'appel SELECT () permet à un système de suivre plusieurs descripteurs de fichiers. Ainsi, l'appel du système sélectionné attend l'un des descripteurs ou un tout pour s'avérer «prêt» pour un type particulier d'activité d'E / S (E.g., entrée possible). Si le processus d'E / S suivant (E.g., lire (2)) peut être effectué malgré le blocage, le descripteur de fichier est jugé capable. La méthode select () décrit si un descripteur de document est disponible pour la lecture, préparé à l'écriture ou dans un état d'exception. Supposons que la situation déclarée est fausse pour les descripteurs de fichiers indiqués. Dans ce cas, les blocs d'appel du système select () avant que les circonstances mentionnées ne soient valables au moins l'un des descripteurs de documents indiqués, égal à l'intervalle de délai d'expiration indiqué.

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

Ayons un exemple simple pour consulter le fonctionnement de l'appel système sélectionné. Ouvrez le shell de ligne de commande à l'aide du «Ctrl + Alt + T."Après l'ouverture du terminal, assurez-vous que un compilateur de langage C est 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 install gcc

Si vous souhaitez voir l'appel système Linux SELECT fonctionner, vous devez avoir le package ManPages-DEV installé sur votre système conformément à 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 sélectionné à l'aide de la commande «Man» ci-dessous.

$ man 2 SELECT

La page Output Man pour l'appel Sélectionner est illustré ci-dessous. Quittez-le en appuyant sur la touche «Q».

Les répertoires standard, les applications de terminal de coquille de commande et les applications pseudo-terminales, les documents centrés sur les flux, 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 inconnu. Ci-dessous est l'explication de l'appel du système sélectionné.

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

Ci-dessus est la bibliothèque à inclure dans le code C tout en utilisant l'appel Sélectionné. S'il n'est pas inclus, le code ne fonctionne pas.

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

Alors que readfds n'est pas nul, il fait référence à un tableau de formulaire FD_SET qui définit les descripteurs de documents qui doivent être testés pour être préparés à lire sur l'entrée et quels descripteurs de documents devraient être définis pour lire sur la sortie.

Quand le writefds Le paramètre n'est pas vide, il fait référence à une entité de formulaire FD_SET qui définit quels descripteurs de documents doivent être testés pour être disposés à inscrire sur l'entrée. Les descripteurs de documents 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 de type FD_SET, qui détermine quels descripteurs de documents doivent être testés pour l'attente d'erreur sur l'état de choses sur l'entrée; De plus, les descripteurs de documents doivent être vérifiés sur la sortie.

Les paramètres ReadFDS, WriteFDS et ErrorFDS sont mis à jour après l'accomplissement pour signifier que les descripteurs de documents sont préparés pour avoir lu, pleinement préparé à l'écriture, ou même avoir une exception en attente, en conséquence. Si le bit ultérieur est fixé sur la contribution et que la situation pertinente est valable pour chaque descripteur de fichier un peu sous NFDS, le bit ultérieur serait placé sur une réalisation efficace.

Bien que le paramètre de délai d'expiration ne soit pas vraiment vide, il conduit à une entité TimeVal de structure qui détermine le temps suprême pour tenir votre feu pour le choix pour terminer. Select () n'obstrume pas tout à fait si un tel paramètre de délai d'expiration conduit à un objet TimeVal de structure avec 0 éléments. SELECT () s'arrête à moins qu'un événement ne permet de récupérer l'un des filtres avec un vrai résultat (non nul), si la déclaration de temps mort est une référence vide. SELECT () réussit efficacement et produit 0 lorsque la période d'attente se termine avant même que.

Cette macro élimine la collection (efface tous les descripteurs de documents). Il peut être utilisé comme le tout premier mouvement 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 dans une collection qui a déjà existé serait non opérationnelle et ne se traduit donc pas par une erreur d'exception.

Le descripteur de document FD est supprimé de la collection par cette macro. Un descripteur de fichiers éliminé de la collection qui n'existe pas est non opérationnel et n'entraîne donc pas une exception.

L'appel du système select () modifie les informations ou les données des collections conformément aux règles mentionnées ci-dessus. La macro fd isset () peut être rejetée en invoquant 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 sous. Le code contient des en-têtes, une fonction principale avec certains descripteurs de fichiers tels que développés ci-dessus. Il contient également une structure pour la valeur d'intervalle de temps. Ensuite, nous avons utilisé l'appel Sélectionné pour vérifier l'erreur dans l'instruction «IF». Appuyez sur «Ctrl + S» pour enregistrer ce code et «Ctrl + X» de 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 dira «Sélectionner un délai d'expiration."

$ ./un.dehors

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

Conclusion:

Nous avons implémenté l'appel système sélectionné sur l'Ubuntu 20.04 Système Linux. Le code doit 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.