sdenter(2) UNIX System V(Application Compatibility Package) sdenter(2)
NAME
sdenter, sdleave - synchronize access to a shared data segment
SYNOPSIS
cc [flag . . .] file . . . -lx
#include <sys/sd.h>
int sdenter(char *addr, int flags);
int sdleave(char *addr);
DESCRIPTION
sdenter is used to indicate that the current process is about to access
the contents of a shared data segment. The actions performed depend on
the value of flags. flags values are formed by OR-ing together entries
from the following list:
SDNOWAIT If another process has called sdenter but not sdleave for the
indicated segment, and the segment was not created with the
SDUNLOCK flag set, return an ENAVAIL error instead of
waiting for the segment to become free.
SDWRITE Indicates that the process wants to write data to the shared
data segment. A process that has attached to a shared data
segment with the SDRDONLY flag set will not be allowed to
enter with the SDWRITE flag set.
sdleave is used to indicate that the current process is done modifying
the contents of a shared data segment.
Only changes made between invocations of sdenter and sdleave are
guaranteed to be reflected in other processes. sdenter and sdleave are
very fast; consequently, it is recommended that they be called frequently
rather than leave sdenter in effect for any period of time. In
particular, system calls should be avoided between sdenter and sdleave
calls.
The fork system call is forbidden between calls to sdenter and sdleave if
the segment was created without the SDUNLOCK flag.
DIAGNOSTICS
Successful calls return 0. Unsuccessful calls return -1 and set errno to
indicate the error. errno is set to EINVAL if a process does an sdenter
with the SDWRITE flag set and the segment is already attached with the
SDRDONLY flag set. errno is set to ENAVAIL if the SDNOWAIT flag is set
for sdenter and the shared data segment is not free.
SEE ALSO
sdget(2), sdgetv(2).
10/89 Page 1