SEMCTL(2)

NOM
semctl - Operations de controle sur les semaphores.

SYNOPSIS
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/sem.h>

int semctl ( int semid, int semno, int cmd, union semun arg )

DESCRIPTION
Cette fonction effectue l'operation de controle indiquee par cmd sur l'ensemble de semaphores (ou sur le semno-ieme semaphore de l'ensemble) identifie par semid. Le premier semaphore de l'ensemble est identifie par la valeur 0 dans l'argument semno.

Le type de l'argument arg est une union
union semun {
	int val;
	/* used for SETVAL only */
	struct semid_ds *buf;
	/* for IPC_STAT and IPC_SET */
	ushort *array;
	/* used for GETALL and SETALL */
};
Les valeurs autorisees pour l'operation cmd sont :

IPC_STAT
    copier dans la structure pointee par arg.buf la structure de donnees concernant l'ensemble de semaphores. L'argument semno est alors ignore. Le processus appelant doit avoir des privileges de lecture sur le jeu de semaphores

IPC_SET
    Fixer la valeur de certains champs de la structure semid_ds pointee par arg.buf dans la structure de controle de l'ensemble de semaphores, en mettant a jour son membre sem_ctime. Les champs de la structure struct semid_ds fournie dans arg.buf et copies dans la structure de l'ensemble sont :

    	sem_perm.uid
    	sem_perm.gid
    	sem_perm.mode	/* 9 bits poids faibles*/

    L'UID effectif du processus appelant doit etre soit celui du Super-User soit celui du createur ou du proprietaire du jeu de semaphores. L'argument semno est ignore.

IPC_RMID
    Supprimer immediatement l'ensemble de semaphores en reveillant tous les processus en attente. Ils obtiendront un code d'erreur, et errno aura la valeur EIDRM. L'UID effectif du processus appelant doit etre soit celui du Super-User soit celui du createur ou du proprietaire du jeu de semaphores. L'argument semno est ignore.

GETALL
    Renvoyer la valeur semval de chaque semaphore de l'ensemble dans le tableau arg.array. L'argument semno est ignore. Le processus appelant doit avoir des privileges de lecture sur le jeu de semaphores.

GETNCNT
    Renvoyer la valeur de semncnt pour le semno-ieme semaphore de l'ensemle (i.e. le nombre de processus en attente d'une incrementation du champ semval du semno-ieme semaphore). Le processus appelant doit avoir des privileges de lecture sur le jeu de semaphores.

GETPID
    Renvoyer la valeur de sempid pour le semno-ieme semaphore de l'ensemble (i.e. le PID du processus ayant execute le dernier appel systeme semop sur le semno-ieme semaphore). Le processus appelant doit avoir des privileges de lecture sur le jeu de semaphores.

GETVAL
    Renvoyer la valeur du champ semval du semno-ieme semaphore de l'ensemble Le processus appelant doit avoir des privileges de lecture sur le jeu de semaphores.

GETZCNT
    Renvoyer la valeur du champ semzcnt du semno-ieme semaphore de l'ensemble. (i.e. le nombre de processus attendant que le champ semval du semno-ieme semaphore revienne a 0). Le processus appelant doit avoir des privileges de lecture sur le jeu de semaphores.

SETALL
    Positionner le champ semval de tous les semaphores de l'ensemble en utilisant le tableau arg.array , et en mettant a jour le champ sem_ctime de la structure semid_ds de controle du jeu de semaphores. Les processus en attente sont reveilles si semval devient 0 ou augmente. L'argument semno est ignore. Le processus appelant doit avoir des privileges d'ecriture sur le jeu de semaphores.

SETVAL
    Placer la valeur arg.val dans le champ semval du semno-ieme semaphore de l'ensemble en mettant a jour le champ sem_ctime dans la structure semid_ds associee au jeu de semaphores. Le processus appelant doit avoir des privileges d'ecriture sur le jeu de semaphores Les processus en attente sont reveilles si semval devient 0 ou augmente.

VALEUR RENVOYEE
En cas d'echec l'appel systeme renvoie -1 et errno contient le code d'erreur. Autrement, l'appel systeme renvoie une valeur non-negative dependant de l'argument cmd :

GETNCNT
    la valeur de semncnt.

GETPID
    La valeur sempid.

GETVAL
    La valeur semval.

GETZCNT
    La valeur semzcnt.

ERREURS
EACCES Le processus appelant n'a pas les privileges necessaires pour executer la commande cmd.

EFAULT
    arg.buf arg.array pointent en dehors de l'espace d'adressage accessible.

EIDRM
    L'ensemble de semaphores a ete supprime.

EINVAL
    cmd ou semid a une valeur illegale.

EPERM
    L'argument cmd reclame les commandes IPC_SET ou IPC_RMID mais l'UID effectif du processus appelant n'a pas les privileges adequats.

ERANGE
    l'argument cmd reclame les commandes SETALL ou SETVAL et la valeur de semval (pour l'ensemble ou pour certains semaphores) est inferieure a 0 ou superieur a la valeur SEMVMX.

NOTES
Les appels systemes IPC_INFO, SEM_STAT et SEM_INFO sont utilises par le programme ipcs(8) pour fournir des informations sur les ressources allouees. Ceci peut changer dans le futur, en utilisant l'interface d'un systeme de fichiers proc.

La limite suivante influe sur l'appel systeme semctl :

SEMVMX
    Valeur maximale pour semval: dependant de l'implementation (generalement 32767).

CONFORMITE
SVr4, SVID. SVr4 documente des conditions d'erreurs supplementaires EINVAL et EOVERFLOW.

VOIR AUSSI
ipc(5), shmget(2), shmat(2), shmdt(2).