Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] semop, semtimedop - Opérations sur les sémaphores. [size=18] [b]Résumé[/b] [/size] .nf [b]#include
[/b] [b]#include
[/b] [b]#include
[/b] .fi [b][i]int semop (int semid ,[/i][/b] [b][i]struct sembuf * sops ,[/i][/b] [b][i]unsigned nsops );[/i][/b] [b][i]int semtimedop (int semid ,[/i][/b] [b][i]struct sembuf * sops ,[/i][/b] [b][i]unsigned nsops ,[/i][/b] [b][i]struct timespec * timeout );[/i][/b] [size=18] [b]Description[/b] [/size] Un sémaphore est représenté par une structure anonyme incluant les membres suivants : .in +4n .nf unsigned short semval; /* valeur du sémaphore */ unsigned short semzcnt; /* # Attente pour zéro */ unsigned short semncnt; /* # Attente d'incrément */ pid_t sempid; /* dernier processus agissant */ .in -4n .fi La fonction [b]semop[/b] effectue des opérations sur les membres de l'ensemble de sémaphores identifié par [b]semid .[/b] Chacun des [i]nsops[/i] éléments dans le tableau pointé par [i]sops[/i] indique une opération à effectuer sur un sémaphore en utilisant une structure [b]struct sembuf[/b] définie comme suit: .in +4n .nf short sem_num; /* Numéro du sémaphore (0=premier) */ short sem_op; /* Opération sur le sémaphore */ short sem_flg; /* Options pour l'opération */ .in -4n .fi Les options possibles pour [b]sem_flg[/b] sont [b]IPC_NOWAIT[/b] et [b]SEM_UNDO .[/b] Si une opération indique l'option [b]SEM_UNDO ,[/b] elle sera annulée lorsque le processus se terminera. L'ensemble des opérations contenues dans [i]sops[/i] est effectué [b]atomiquement .[/b] Les opérations sont toutes réalisées en même temps, et seulement si elle peuvent toutes être effectuées. Le comportement de l'appel-système si toutes les opérations ne sont pas réalisables dépend de la présence de l'attribut [b]IPC_NOWAIT[/b] dans les champs [i]sem_flg[/i] décrits plus bas. Chaque opération est effectuée sur le [b]sem_num -ième[/b] sémaphore de l'ensemble. Le premier sémaphore est le numéro [b]0 .[/b] Pour chaque sémaphore l'opération est l'une des trois décrites ci-dessous. Si l'argument [b]sem_op[/b] est un entier positif, la fonction ajoute cette valeur à [b] semval .[/b] De plus si [b]SEM_UNDO[/b] est demandé, le système met à jour le compteur "undo" du sémaphore [i]( semadj ).[/i] Cette opération n'est jamais bloquante. Le processus appelant doit avoir l'autorisation de modification sur le jeu de sémaphores. Si [b]sem_op[/b] vaut zéro le processus attend que [b]semval[/b] soit nul. Plusieurs cas sont possibles : Si [b]semval[/b] vaut zéro, l'appel système continue immédiatement Sinon, si l'on a réclamé [b]IPC_NOWAIT[/b] dans [b]sem_flg ,[/b] l'appel système échoue (en annulant les actions précédentes) et [b]errno[/b] contient le code d'erreur [b]EAGAIN .[/b] Autrement [b]semzcnt[/b] est incrémenté de 1 et le processus s'endort jusqu'à ce que l'un des évènements suivants se produise : [list=square][item] [i]semval[/i] devient égal à 0, alors [i]semzcnt[/i] est décrémenté. L'appel système continue[/item][/list] [list=square][item] Le jeu de sémaphores est supprimé. L'appel système échoue et [i]errno[/i] contient le code d'erreur [b]EIDRM .[/b][/item][/list] [list=square][item] Le processus reçoit un signal à intercepter, la valeur de [i]semzcnt[/i] est décrémentée et l'appel système échoue avec [i]errno[/i] contenant le code d'erreur [b]EINTR .[/b][/item][/list] [list=square][item] La limite temporelle indiquée par [i]timeout[/i] dans un [b]semtimedop[/b] a expiré : l'appel-système échoue avec [i]errno[/i] contenant [b]EAGAIN .[/b][/item][/list] Si [b]sem_op[/b] est inférieur à zéro, le processus appelant doit avoir l'autorisation de modification sur le jeu de sémaphores. Si [b]semval[/b] est supérieur ou égal à la valeur absolue de [b]sem_op ,[/b] la valeur absolue de [b]sem_op[/b] est soustraite de [b]semval .[/b] Si [b]SEM_UNDO[/b] est indiqué, le système met à jour le compteur "undo" du sémaphore. Puis l'appel système continue. Autrement si l'on a réclamé [b]IPC_NOWAIT[/b] dans [b]sem_flg ,[/b] l'appel système échoue (annulant les actions précédentes et [b]errno[/b] contient le code d'erreur [b]EAGAIN .[/b] Sinon [b]semncnt[/b] est décrémenté de un et le processus s'endort jusqu'à ce que l'un des évènements suivants se produise : [list=square][item] [i]semval[/i] devient supérieur ou égal à la valeur absolue de [b]sem_op ,[/b] alors la valeur [i]semncnt[/i] est décrémentée, la valeur absolue de [i]sem_op[/i] est soustraite de [i]semval[/i] et si [b]SEM_UNDO[/b] est demandé le système met à jour le compteur "undo" du sémaphore. Puis l'appel système continue.[/item][/list] [list=square][item] Le jeu de sémaphores est supprimé. L'appel système échoue et [b]errno[/b] contient le code d'erreur [b]EIDRM .[/b][/item][/list] [list=square][item] Le processus reçoit un signal à intercepter, la valeur de [b]semncnt[/b] est décrémentée et l'appel système échoue avec [b]errno[/b] contenant le code d'erreur [b]EINTR .[/b][/item][/list] [list=square][item] La limite temporelle indiqué par [i]timeout[/i] dans un [b]semtimedop[/b] a expiré : l'appel-système échoue avec [i]errno[/i] contenant [b]EAGAIN .[/b][/item][/list] en cas de succès, le membre [b]sempid[/b] de la structure [b]sem[/b] de chacun des sémaphores indiqués dans le tableau pointé par [i]sops[/i] est rempli avec le PID du processus appelant. Enfin [b]sem_otime[/b] est fixé à l'heure actuelle. La fonction [b]semtimedop[/b] se comporte comme [b]semop[/b] sauf que dans le cas où le processus doit dormir, la durée maximale du sommeil est limitée par la valeur spécifiée dans la structure [b]timespec[/b] dont l'adresse est transmise dans le paramètre [b]timeout .[/b] Si la limite indiquée a été atteint, l'appel-système échoue avec [i]errno[/i] contenant [b]EAGAIN[/b] (et aucune opération de [i]sops[/i] n'est réalisée). Si le paramètre [i]timeout[/i] est [b]NULL ,[/b] alors [b]semtimedop[/b] se comporte exactement comme [b]semop .[/b] [size=18] [b]Valeur renvoyée[/b] [/size] . semop renvoie la valeur [b]0 ,[/b] s'il réussit et [b]-1[/b] s'il échoue auquel cas [b]errno[/b] contient le code d'erreur. [size=18] [b]Erreurs[/b] [/size] [b]E2BIG[/b] [table][row][col] [/col][col]l'argument [i]nsops[/i] est supérieur à [b]SEMOPM ,[/b] le nombre maximal d'opérations par appel système.[/col][/row][/table] [b]EACCES[/b] [table][row][col] [/col][col]Le processus appelant n'a pas les permissions d'accès nécessaires.[/col][/row][/table] [b]EAGAIN[/b] [table][row][col] [/col][col]Une opération a échoué et [b]IPC_NOWAIT[/b] a été indiqué dans l'argument [b]sem_flg ,[/b] ou la durée limite indiquée dans [i]timeout[/i] a expiré.[/col][/row][/table] [b]EFAULT[/b] [i]sops[/i] [table][row][col] [/col][col]pointe en dehors de l'espace d'adressage accessible.[/col][/row][/table] [b]EFBIG[/b] [table][row][col] [/col][col]La valeur de [b]sem_num[/b] est inférieure à 0 ou supérieure ou égale au nombre de sémaphores dans l'ensemble.[/col][/row][/table] [b]EIDRM[/b] [table][row][col] [/col][col]Le jeu de sémaphores a été supprimé.[/col][/row][/table] [b]EINTR[/b] [table][row][col] [/col][col]Un signal a été reçu pendant l'attente.[/col][/row][/table] [b]EINVAL[/b] [table][row][col] [/col][col]L'ensemble de sémaphores n'existe pas ou [i]semid[/i] est inférieur à zéro, ou [i]nsops[/i] n'a pas une valeur positive.[/col][/row][/table] [b]ENOMEM[/b] [table][row][col] [/col][col]L'argument [i]sem_flg[/i] de certaines opérations demande [b]SEM_UNDO[/b] et le système n'a pas assez de mémoire pour allouer les structures nécessaires.[/col][/row][/table] [b]ERANGE[/b] [b]semop + semval[/b] [table][row][col] [/col][col]est supérieur à [b]SEMVMX.[/b][/col][/row][/table] [size=18] [b]Notes[/b] [/size] Les structures [b]sem_undo[/b] d'un processus ne sont pas héritées par ses enfants lors d'un [b]fork (2).[/b] par contre elles sont transmises lors d'un [b]execve (2).[/b] [b]semop[/b] n'est jamais relancé automatiquement après avoir été interrompu par un gestionnaire de signal quelque soit l'attribut [b]SA_RESTART[/b] durant l'installation du gestionnaire. [i]semadj[/i] est un entier pour le processus qui représente simplement le compte (négatif) des opérations sur le sémaphore réalisées par l'attribut [b]SEM_UNDO .[/b] Quand la valeur d'un sémaphore est fixée directement par une requête [b]SETVAL[/b] ou [b]SETALL[/b] de [b]semctl (2),[/b] la valeur [i]semadj[/i] correspondante est effacée dans tous les processus. Les valeurs [i]semval[/i], [i]sempid[/i], [i]semzcnt[/i], et [i]semnct[/i] pour un sémaphore peuvent être retrouvées avec des appels [b]semctl (2)[/b] spécifiques. Les limites système suivantes concernent [b]semop :[/b] [b]SEMOPM[/b] [table][row][col] [/col][col]Nombre maximal d'opérations pour un appel système [b]semop (32).[/b][/col][/row][/table] [b]SEMVMX[/b] [table][row][col] [/col][col]Valeur maximale pour [b]semval :[/b] dépendante de l'implémentation (32767).[/col][/row][/table] L'implémentation n'a pas de limites intrinsèques pour la valeur maximale d'effacement en sortie [b]( SEMAEM ), [/b] le nombre de structure d'annulation sur le système [b]( SEMMNU ),[/b] et le nombre maximal de structures d'annulation pour un processus. [size=18] [b]Bugs[/b] [/size] Quand un processus se termine, l'ensemble des structures [i]semadj[/i] qui lui sont associées servent à annuler les effets de toutes les opérations sur les sémaphores réalisées avec l'attribut. [b]SEM_UNDO .[/b] Ceci pose un problème : si l'une (ou plusieurs) des modifications sur les sémaphores demande une descente du compteur d'un sémaphore en-dessous de zéro, que doit faire l'implémentation ? Une approche possible consiste à bloquer jusqu'à ce que la modification du sémaphore soit possible. C'est néanmoins peu désirable car la terminaison du processus peut bloquer pendant une période arbitrairement longue. Une autre possibilité est d'ignorer la modification du sémaphore (comme un échec lorsque [b]IPC_NOWAIT[/b] est spécifié durant une opération). Linux adopte une troisième approche : décroître la valeur du sémaphore autant que possible (jusqu'à zéro) et permettre au processus de se terminer immédiatement. [size=18] [b]Conformité[/b] [/size] SVr4, SVID. SVr4 documente les conditions d'erreur supplémentaires EINVAL, EFBIG, et ENOSPC. [size=18] [b]Voir aussi[/b] [/size] [b]ipc (5),[/b] [b]semctl (2),[/b] [b]semget (2),[/b] [b]sigaction (2)[/b] [size=18] [b]Traduction[/b] [/size] Christophe Blaess, 1996-2003.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?