[ Next Article |
Previous Article |
Book Contents |
Library Home |
Legal |
Search ]
Files Reference
sem.h File
Purpose
Describes the structures that are used by subroutines that
perform semaphore operations.
Description
The /usr/include/sys/sem.h file defines the
structures that are used by the semop subroutine and the semctl subroutine to
perform various semaphore operations.
The sem structure stores the values that the
Commands parameter of the semctl subroutine gets and sets. This structure contains
the following fields:
semval |
Specifies the operation permission structure of a semaphore. The data type of this
field is unsigned short. |
sempid |
Specifies the last process that performed a semop subroutine. The data type of
this field is pid_t. |
semncnt |
Specifies the number of processes awaiting semval > cval. The data type
of this field is unsigned short. |
semzcnt |
Specifies the number of processes awaiting semval = 0. The data type of
this field is unsigned short. |
The sembuf structure stores semaphore information used by
the semop subroutine. This structure contains the following fields:
sem_num |
Specifies a semaphore on which to perform some semaphore operation. The data type of
this field is unsigned short. |
sem_op |
Specifies a semaphore operation to be performed on the semaphore specified by the
sem_num field and the SemaphoreID parameter of the semop subroutine.
This value can be a positive integer, a negative integer, or 0:
i |
If the current process has write permission, the positive integer value of this field
is added to the value of the semval field of the semaphore. |
- i |
If the current process has write permission, a negative integer value in this field
causes one of the following actions:
If the semval field is greater than or equal to the
absolute value of the sem_op field, the absolute value of the sem_op
field is subtracted from the value of the semval field.
If the semval field is less than the absolute value
of the sem_op field and the IPC_NOWAIT flag is set, the semop
subroutine returns a value of -1 and sets the errno global variable to EAGAIN.
If the value of the semval field is less than the
absolute value of the sem_op field and the IPC_NOWAIT flag is not set, the
semop subroutine increments the semncnt field associated with the specified
semaphore and suspends execution of the calling process until one of the following conditions is
met:
- The value of the semval field becomes greater than
or equal to the absolute value of the sem_op field. When this occurs, the value of
the semncnt vield associated with the specified semaphore is decremented, the
absolute value of the sem_op field is subtracted from semval value and,
if the SEM_UNDO flag is set in the sem_flg field, the absolute value of the
sem_op field is added to the Semadj value of the calling process for the
specified semaphore.
- The semaphore specified by the SemaphoreID parameter for
which the calling process is awaiting action is removed from the system (see the semctl
subroutine). When this occurs, the errno global variable is set equal to EIDRM, and
a value of -1 is returned.
- The calling process receives a signal that is to be caught. When
this occurs, the value of the semncnt field associated with the specified semaphore
is decremented, and the calling process resumes execution in the manner prescribed in the
sigaction subroutine.
|
0 |
If the current process has read permission, a value of 0 in this field causes one of
the following actions:
- If the semval field is 0, the semop
subroutine returns a value of 0.
- If the semval field is not equal to 0 and the
IPC_NOWAIT flag is set, the semop subroutine returns a value of -1 and sets the
errno global variable to EAGAIN.
- If semval is not equal to 0 and the
IPC_NOWAIT flag is not set, the semop subroutine increments the
semzcnt field associated with the specified semaphore and suspends execution of the
calling process until one of the following conditions is met:
- The value of the semval field becomes 0, at which
time the value of the semzcnt field associated with the specified semaphore is
decremented.
- The semaphore specified by the SemaphoreID parameter for
which the calling process is awaiting action is removed from the system. When this occurs, the
errno global variable is set equal to EIDRM, and a value of -1 is returned.
- The calling process receives a signal that is to be caught. When
this occurs, the value of the semzcnt field associated with the specified semaphore
is decremented, and the calling process resumes execution in the manner prescribed in the
sigaction subroutine.
|
The data type of the sem_op field is short. |
sem_flg |
If the value of this field is not 0 for an operation, the value is constructed by
logically ORing one or more of the following values:
SEM_UNDO |
Specifies whether to modify the Semadj values of the calling process.
If this value is set for an operation and the value of the
sem_op field is a positive integer, the value of the sem_op field is
subtracted from the Semadj value of the calling process.
If this value is set for an operation and the value of the
sem_op field is a negative integer, the absolute value of the sem_op
field is added to the Semadj value of the calling process. The exit subroutine adds
the Semadj value to the value of the semval field of the semaphore when the
process terminates. |
SEM_ORDER |
Specifies whether to perform atomically or individually the operations specified by
the SemaphoreOperations array of the semop subroutine. (This flag is valid only
when included in the SemaphoreOperations[0].sem_flg parameter, the first operation
in the SemaphoreOperations array.)
If the SEM_ORDER flag is not set (the default), the
specified operations are performed atomically. That is, none of the semval values in
the array are modified until all of the semaphore operations are completed. If the calling
process must wait until some semval requirement is met, the semop subroutine
does so before performing any of the operations. If any semaphore operation would cause an error
to occur, none of the operations are performed.
If the SEM_ORDER flag is set, the operations are
performed individually in the order that they appear in the array, regardless of whether any of
the operations require the process to wait. If an operation encounters an error condition, the
semop subroutine sets the SEM_ERR flag in the sem_flg field of the
failing operation; neither the failing operation nor the following operations in the array are
performed. |
IPC_NOWAIT |
Specifies whether to wait or to return immediately when the semval of a
semaphore is not a certain value. |
The data type of the sem_flg field is short. |
The semid_ds structure stores semaphore status
information used by the semctl subroutine and pointed to by the Buffer parameter.
This structure contains the following fields:
sem_perm |
Specifies the operation permission structure of a semaphore. The data type of this
field is struct ipc_perm. |
sem_nsems |
Specifies the number of semaphores in the set. The data type of this field is unsigned
short. |
sem_otime |
Specifies the time at which a semop subroutine was last performed. The data
type of this field is time_t. |
sem_ctime |
Specifies the time at which this structure was last changed with a semctl
subroutine. The data type of this field is time_t. |
Implementation Specifics
This file is part of Base Operating System (BOS) Runtime.
Processes Programmer's Guide.
Related Information
The
atexit subroutine,
exec subroutines,
exit subroutine
fork subroutine,
semctl subroutine,
semget subroutine,
semop subroutine,
sigaction subroutine.
The Header Files
Overview defines header files, describes how they are used, and lists several of the header
files for which information is provided in this documentation.
[ Next Article |
Previous Article |
Book Contents |
Library Home |
Legal |
Search ]