Syntaxe de la fonction SEM_OPEN 3 C
# SEM_OPEN (const char * name, int oflag, mode long non signé, valeur intracieuse non signée);
Description de la fonction SEM_OPEN ()
Un lien est établi entre un sémaphore défini et un cadre en utilisant la méthode SEM_OPEN (). L'emplacement est obtenu par l'utilisation de la fonction SEM_OPEN () avec le terme de sémaphore qui permet au système de se référer au sémaphore correspondant à l'étiquette spécifiée. Jusqu'à ce que le sémaphore soit terminé avec succès par une fonction SEM Close () ou toute autre méthode de l'exécutif, il peut toujours être utilisé par la fonction. La fonction opérationnelle à SEM_OPEN () détermine si le sémaphore est généré ou uniquement accessible, selon le paramètre OFLAG. Les éléments de drapeau répertoriés dans les éléments suivants peuvent être configurés dans le paramètre OFLAG:
Flag O_Creat:
Si un sémaphore ne présentait pas encore, il est établi en utilisant ce drapeau. O_Creat n'a aucun impact si le sémaphore est présent et spécifié, sauf ce qui est mentionné dans l'O_EXCL. Un sémaphore étiqueté est formé à la place si nous utilisons la fonction SEM_OPEN (). Les 3e et 4e paramètres de l'attribut O_Creat sont des modes de mode format T, son contenu et du type de données entier non signé.
Une valeur approximative des données est utilisée pour construire le sémaphore. Les sémaphores doivent avoir les valeurs de début supérieures ou équivalentes à la valeur SEM Max. L'ID utilisateur efficace du programme est attribué comme l'ID unique du Semaphore. L'ID standard de l'ordinateur ou l'ID de groupe efficace du cadre est fourni comme ID de groupe du Semaphore.
Outre ceux configurés dans le masque d'initialisation du format de fichier du système, les octets d'autorisation du sémaphore sont tous affectés à la valeur du mode argument. L'impact est ambigu chaque fois que les éléments d'un mode au lieu des indicateurs d'accès au fichier sont fournis. D'autres méthodologies peuvent être liées au sémaphore en invoquant la fonction SEM_OPEN () ayant une valeur similaire du titre. Par la suite, le nom de Semaphore appelé nom est formé par la fonction SEM_OPEN (), y compris l'indicateur O_Creat.
Flag O_Excl:
Si le titre de sémaphore existe déjà, SEM_OPEN () refuse si les O_Excl et O_Creat sont spécifiés. En termes d'autres méthodes invoquant la fonction SEM_OPEN () avec O_Excl et O_Creat défini, la vérification pour voir si le sémaphore se produit déjà et la formation du sémaphore lorsqu'elle n'est pas présente ou les deux sont asynchrones.
Le résultat est indéfinissable lorsque O_Excl et O_Creat sont spécifiés. L'impact n'est pas défini si la variable OFLAG contient des drapeaux en dehors de O_Creat et O_Excl. Une chaîne spécifiant un élément de sémaphore est la source du paramètre de nom. Si la valeur réside dans les fichiers système et est accessible aux méthodes qui utilisent les noms de chemin comme paramètres ne sont pas fournis, le paramètre de nom répond aux exigences de la formation d'un chemin d'accès. L'élément initial du nom est une barre oblique (/), et aucun autre éléments du nom ne peut contenir des barres obliques.
Le même emplacement de sémaphore est fourni pour chaque accès consécutif à la fonction SEM_OPEN () qu'une méthode rend la valeur de nom similaire, à condition qu'aucun argument à Sem_unlink () ne soit fait pour un tel sémaphore. Les liens vers les doublons de sémaphore génèrent des résultats incohérents. Les sémaphores non identifiés sont employés avec la méthode SEM_INIT ().
Valeur de retour
La fonction renvoie l'emplacement du sémaphore après une exécution réussie. Sinon, cela devrait être attribué Errno pour identifier l'erreur et générer les résultats de l'échec du SEM. L'en-tête contient une description du terme SEM a échoué. Si le SEM_OPEN () échoue, il fournit toujours la valeur sous la forme du SEM échoué.
Exemple de la fonction SEM_OPEN 3 C dans Ubuntu
Voyons comment fonctionne la fonction SEM_OPEN () dans Ubuntu. Au début du programme, différentes bibliothèques sont importées. Ces modules sont responsables de faire fonctionner les différentes fonctions. Ensuite, nous définissons la taille du tampon et la fixons sur 10. Nous initialisons un tampon variable et déclarons les différentes autres variables. À l'étape suivante, nous initialisons la variable de comptoir avec ces deux constructeurs spécifiés. Nous appliquons la boucle pour et définissons la condition. Nous utilisons également la boucle while.
Nous vérifions si la valeur de la variable de comptoir est égale à la taille du tampon en utilisant une boucle while. Mais si la valeur du compteur est inférieure à la taille du tampon, il y aura une augmentation de la valeur du compteur. De plus, nous utilisons la fonction Sleep () pour maintenir la sortie pendant un certain temps.
Nous utilisons le constructeur vide du consommateur. Dans ce domaine, nous appliquons le constructeur de la variable «var». Nous initialisons la variable «élément». Ensuite, nous utilisons une boucle de temps. Après cela, nous utilisons l'instruction IF pour confirmer si la valeur du compteur est supérieure à 0 ou non. Si la valeur de la variable de compteur est supérieure à 0, il y a une diminution de la valeur du compteur.
Dans cette phase du code, nous déclarons les différentes variables. Maintenant, nous déclarons un constructeur. Nous appelons la méthode SEM_OPEN (). Il contient quatre paramètres différents. Pour résilier le programme, nous appliquons la fonction pthread_exit ().
Nous obtenons ce type de sortie suivant après avoir exécuté le code aérien:
Conclusion
Dans cet éditorial, nous avons parlé de l'utilisation de la fonction SEM_OPEN 3 C dans Ubuntu. Tout d'abord, nous avons vu la syntaxe de cette fonction. Ensuite, nous avons décrit certaines caractéristiques de cette fonction. Après tout cela, nous avons exécuté un programme dans Ubuntu qui a la fonction SEM_OPEN ().