semop()

perform array of operations on semaphore set 

Function


SYNOPSIS

#include <sys/sem.h>

int semop(int semid, struct sembuf *sops, size_t nsops);


DESCRIPTION

The semop() function performs atomically an array of semaphore operations on the set of semaphores associated with the semaphore identifier that semid specifies. sops is a pointer to the array of semaphore-operation structures. nsops is the number of semaphore-operation structures in the array. The contents of each structure includes the following members:

short sem_num;  /* semaphore number */
short sem_op;   /* semaphore operation. */
short sem_flg;  /* operation flags */

Each semaphore operation specified by sem_op is performed on the corresponding semaphore identified by semid and sem_num. The variable sem_op specifies one of three semaphore operations as follows, depending upon whether its value is negative, positive, or zero.

If sem_op is a negative integer and the calling process has alter permission, one of the following occurs.

If sem_op is a positive integer and the calling process has alter permission, the value of sem_op is added to semval; and, if (sem_flg & SEM_UNDO) is non-zero, the value of sem_op is subtracted from the semadj value of the calling process for the specified semaphore.

If sem_op is zero and the calling process has read permission, one of the following occurs:

When semop() successfully completes, the value of sempid for each semaphore specified in the array pointed to by sops is set equal to the process ID of the calling process.


PARAMETERS

semid 

Is a unique positive integer created by a semget() call.

sops 

Points to the array of semaphore-operation structures.

nsops 

Is the number of semaphore-operation structures in sops.


RETURN VALUES

If successful, semop() returns a value of 0. On failure, semop() returns a value of -1 and sets errno to one of the following values:

E2BIG 

nsops is greater than the system-imposed maximum.

EACCES 

Operation permission is denied to the calling process.

EAGAIN 

The operation would result in suspension of the calling process but (sem_flg & IPC_NOWAIT) is non-zero.

EFAULT 

sops points to an illegal address.

EFBIG 

sem_num is less than zero or greater than or equal to the number of semaphores in the set associated with semid.

EIDRM 

A semid was removed from the system.

EINTR 

A signal interrupted the call.

EINVAL 

semid is not a valid semaphore identifier.

The number of individual semaphores for which the calling process requests a SEM_UNDO would exceed the limit.

ENOSPC 

The limit on the number of individual processes requesting a SEM_UNDO would be exceeded.

ERANGE 

An operation would cause a semadj value to overflow the system-imposed limit.

An operation would cause a semval to overflow the system-imposed limit.


CONFORMANCE

UNIX 98


MULTITHREAD SAFETY LEVEL

MT-Safe.


PORTING ISSUES

NuTCRACKER Platform semaphores are not implemented in terms of Win32 semaphores; therefore, they cannot be shared with Win32 applications.


AVAILABILITY

PTC MKS Toolkit for Professional Developers
PTC MKS Toolkit for Professional Developers 64-Bit Edition
PTC MKS Toolkit for Enterprise Developers
PTC MKS Toolkit for Enterprise Developers 64-Bit Edition


SEE ALSO

Functions:
semctl(), semget(), sigaction()


PTC MKS Toolkit 10.4 Documentation Build 39.