Amiga Unix — 68040 · 68060

Manual pages › XENIX system calls (2Z)

sdenter(2Z)

synchronizes access to a shared data segment.

From the original Amiga UNIX 2.1 manual. Some things it mentions may not be in this release.

NAME

sdenter, sdleave - synchronizes 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: 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. 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 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 SD_UNLOCK flag.

DIAGNOSTICS

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 and the shared data segment is not free.

SEE ALSO

sdget(2), sdgetv(2).