p A new set containing .Fa nsems semaphores is created if either .Fa key is equal to .Dv IPC_PRIVATE , or .Fa key does not have a semaphore set associated with it and the .Dv IPC_CREAT bit is set in .Fa semflg . If both the .Dv IPC_CREAT bit and the .Dv IPC_EXCL bit are set in .Fa semflg , and .Fa key has a semaphore set associated with it already, the operation will fail.
p If a new set of semaphores is created, the data structure associated with it (the .Va semid_ds structure, see .Xr semctl 2 ) is initialized as follows: l -bullet t .Va sem_perm.cuid and .Va sem_perm.uid are set to the effective uid of the calling process. t .Va sem_perm.gid and .Va sem_perm.cgid are set to the effective gid of the calling process. t .Va sem_perm.mode is set to the lower 9 bits of .Fa semflg . t .Va sem_nsems is set to the value of .Fa nsems . t .Va sem_ctime is set to the current time. t .Va sem_otime is set to 0. .El .Sh RETURN VALUES .Fn semget returns a non-negative semaphore identifier if successful. Otherwise, -1 is returned and .Va errno is set to reflect the error. .Sh ERRORS l -tag -width Er t Bq Er EACCES The caller has no permission to access a semaphore set already associated with .Fa key . t Bq Er EEXIST Both .Dv IPC_CREAT and .Dv IPC_EXCL are set in .Fa semflg , and a semaphore set is already associated with .Fa key . t Bq Er EINVAL .Va nsems is less than 0 or greater than the system limit for the number in a semaphore set.
p A semaphore set associated with .Fa key exists, but has fewer semaphores than the number specified in .Fa nsems . t Bq Er ENOSPC A new set of semaphores could not be created because the system limit for the number of semaphores or the number of semaphore sets has been reached. t Bq Er ENOENT .Dv IPC_CREAT is not set in .Fa semflg and no semaphore set associated with .Fa key was found. .El .Sh SEE ALSO .Xr ipcs 1 , .Xr semctl 2 , .Xr semop 2 , .Xr ftok 3 .Sh STANDARDS The .Nm system call conforms to .St -xsh5 . .Sh HISTORY Semaphores appeared in the first release of .At V .