HP 3000 Manuals

semget [ MPE/iX Developer's Kit Reference Manual Volume II ] MPE/iX 5.0 Documentation


MPE/iX Developer's Kit Reference Manual Volume II

semget 

Returns a semaphore identifier.

Syntax 

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

     int semget (key_t key, int nsems, int semflg);

Parameters 

key        Either a user-defined key value to rendezvous with the
           semaphore set, or IPC_PRIVATE. If IPC_PRIVATE is specified, a
           new semaphore set is created, but other processes cannot
           rendezvous by key.  Refer to the description of ftok() for
           details about obtaining user-defined key values

nsems      The number of semaphores in the set.  The maximum number of
           semaphores per set is 4096.

semflg     Valid flags for this function are:

           IPC_CREAT  If a semaphore set is not already associated with
                      key, a new semaphore identifier is allocated and a
                      semaphore set and data structure are associated
                      with it.  If a semaphore identifier is already
                      associated with key, and IPC_EXCL is not specified,
                      semget() returns the semaphore identifier currently
                      associated with key.

           IPC_EXCL   If specified with IPC_CREAT, semget() returns an
                      error if a semaphore identifier is currently
                      associated with key.

           MODE       The lower nine bits of semflg contain the access
                      permission bits (similar to the nine-bit mask found
                      in file entries).  They define the access rights
                      for the owner, the group, and other users on the
                      system.

Return Values 

>=0        Success.  A semaphore identifier is returned.

-1         An error occurred, and errno is set to indicate the error
           condition.

Description 

The semget() function returns a semaphore identifier associated with the
value passed in key.  A semaphore identifier and the associated data
structure and semaphore set containing nsems semaphores are created for
key if one of the following conditions is true:

   *   The value passed in key is equal to IPC_PRIVATE.

   *   The value passed in key does not already have a semaphore
       identifier associated with it, and the semflg specifies IPC_CREAT.

The data structure associated with the new semaphore identifier is
initialized to the following values:

sem_perm.cuid   Effective user ID of the calling process (creator user
                ID)
sem_perm.uid    Effective user ID of the calling process (owner user ID)
sem_perm.cgid   Effective group ID of the calling process (creator group
                ID)
sem_perm.gid    Effective group ID of the calling process (owner group
                ID)
sem_perm.mode   Low-order 9 bits are set equal to the low-order 9 bits of
                semflg 
sem_nsems       The value of nsems 
sem_otime       0
sem_ctime       Current time

Implementation Considerations 

The maximum number of semaphores per set is 4096.

An MPE/iX system manager can use the MPE/iX SVIPC utility to
interactively configure:

   *   The maximum number of semaphores in a semaphore set
   *   The maximum value for a semaphore
   *   The maximum semaphore operation value
   *   The maximum semaphore adjust value
   *   The maximum number of semaphore sets allowed system wide
   *   [REV BEG]
       The maximum number of semaphore operations allowed per semop()
       call[REV END]

Refer to the section "Managing SVID IPC Services" for more information.

Errors 

If an error occurs, errno is set to one of the following values.

EACCES            CAUSE           A semaphore identifier exists for key and the calling
                                  process does not have permission (specified by the
                                  low-order 9 bits of semflg).

                  ACTION          Ensure the calling process has access permissions
                                  required to access the existing semaphore identifier.

EEXIST            CAUSE           A semaphore identifier exists for key and semflg 
                                  specifies both IPC_CREAT and IPC_EXCL.

                  ACTION          To access the existing identifier for key, retry the
                                  operation without the IPC_EXCL option.  To create a
                                  new semaphore set with IPC_EXCL, a unique key must be
                                  specified.

EINVAL            CAUSE           nsems is either less 1 or greater than the
                                  system-defined limit, or a semaphore identifier
                                  exists for key and the number of semaphores in the
                                  set is less than nsems and nsems is not equal to 0.

                  ACTION          If accessing an existing semaphore set, make sure the
                                  nsems value does not exceed the number of semaphores
                                  in the existing set.  If creating a new semaphore
                                  set, make sure nsems does not exceed the
                                  system-defined limit.

ENOENT            CAUSE           A semaphore identifier does not exist for key and
                                  semflg does not specify IPC_CREAT.

                  ACTION          If attempting to access an existing semaphore set,
                                  make sure the right key value was specified.  If a
                                  new semaphore set should be created for that key if
                                  none exists, then make sure IPC_CREAT is specified.

ENOSPC            CAUSE           The number of semaphore identifiers would exceed the
                                  system-defined limit.

                  ACTION          None.  The operation can be retried if another
                                  semaphore identifier is removed from the system.

          Table 2-0.  (cont.) 

ESYSERR           CAUSE           An operating system error occurred that does not map
                                  directly to any of the above errors.

                  ACTION          Examine the MPE/iX process error stack for the type
                                  of system error.

See Also 

semctl(), semop(), SVID2 (Section 12)



MPE/iX 5.0 Documentation