SDENTER(S) XENIX System V SDENTER(S)
Name
sdenter, sdleave - Synchronizes access to a shared data
segment.
Syntax
#include <sys/sd.h>
int sdenter(addr,flags)
char *addr;
int flags;
int sdleave(addr)
char *addr;
Description
sdenter is used to indicate that the current process is
about to access the contents of a shared data segment. addr
is the valid return code from a previous sdget (S) call.
The actions performed depend on the value of flags. flags
values are formed by OR-ing together entries from the
following list:
SD_NOWAIT If another process has called sdenter but not
sdleave for the indicated segment, and the
segment was not created with the SD_UNLOCK
flag set, return an ENAVAIL error instead of
waiting for the segment to become free.
SD_WRITE 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
SD_RDONLY flag set will not be allowed to
enter with the SD_WRITE 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 invocatations 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 SD_UNLOCK
flag.
Page 1 (printed 8/7/87)
SDENTER(S) XENIX System V SDENTER(S)
Return Value
Successful calls return 0. Unsuccessful calls return -1, and
errno is set to indicate the error. errno is set to EINVAL
if a process does an sdenter with the SD_WRITE flag set and
the segment is already attached with the SD_RDONLY flag set.
errno is set to ENAVAIL if the SD_NOWAIT flag is set for
sdenter call and the shared data segment is not free.
See Also
sdget(S), sdgetv(S)
Notes
This feature is a XENIX specific enhancement and may not be
present on all UNIX implementations. This routine must be
linked with the linker option -lx.
Page 2 (printed 8/7/87)