Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sdget(S) — OpenDesktop Software Development System 3.0.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sbrk(S)

sdenter(S)

sdgetv(S)


 sdget(S)                       6 January 1993                       sdget(S)


 Name

    sdget, sdfree - attaches and detaches a shared data segment.

 Syntax


    cc  . . .  -lx


    #include  <sys/sd.h>

    char *sdget(path, flags, [size, mode])
    char *path;
    int flags, mode;
    long size;

    int sdfree(addr);
    char *addr;


 Description

    sdget attaches a shared data segment to the data space of the current
    process.  The actions performed are controlled by the value of flags.
    flags values are constructed by OR-ing flags from the following list:

    SDRDONLY      Attach the segment for reading only.

    SDWRITE       Attach the segment for both reading and writing.

    SDCREAT       If the segment named by path exists and is not in use
                   (active), this flag has the same effect as creating a seg-
                   ment from scratch.  Otherwise, the segment is created
                   according to the values of size and mode.  Read and write
                   access to the segment is granted to other processes based
                   on the permissions passed in mode, and functions the same
                   as those for regular files. Execute permission is meaning-
                   less.  The segment is initialized to contain all zeroes.

    SDUNLOCK      If the segment is created because of this call, the seg-
                   ment is made so that more than one process can be between
                   sdenter and sdleave calls.

    sdfree detaches the current process from the shared data segment that is
    attached at the specified address.  If the current process has done
    sdenter but not an sdleave for the specified segment, sdleave is done
    before detaching.

    When no process remains attached to the segment, the contents of that
    segment disappear, and no process can attach to the segment without
    creating it by using the SDCREAT flag in sdget.  errno is set to EEXIST
    if a process tries to create a shared data segment that exists and is in
    use.  errno is set to ENOTNAM if a process attempts an sdget on a file
    that exists but is not a shared data type.

 Notes

    Use of the SDUNLOCK flag on systems without hardware support for shared
    data may cause severe performance degradation.

    For 286 programs, it is strongly recommended that sdget and other shared
    data functions be reserved for large model programs only.  Small or mid-
    dle model programs that attempt to use shared data may run out of avail-
    able memory. Also, due to the 286 hardware, it is not possible to enforce
    the read-only aspect of small model shared data. However, read-only seg-
    ments are honored in large model programs.

    The 386 provides a 32 bit address space, even in small model. As a
    result, shared data may be conveniently used without regard to the re-
    strictions that apply to 286 programs.

    sdget automatically increments the process's original break value to the
    memory location immediately after the shared data segment.  This affects
    subsequent sbrk or brk calls which attempt to restore the original break
    value.  In particular, attempts to restore the break value to its value
    before the sdget call causes an error.

    This feature is a XENIX specific enhancement and may not be present in
    all UNIX implementations.  This routine must be linked using the linker
    option -lx.

    The size variable in sdget has changed from unsigned to long between UNIX
    Version 3.0 and UNIX System  V. Although this requires that source code
    be modified to use a long size parameter when compiling with the
    libraries, an unsigned size parameter is still correctly interpreted by
    the kernel when passed by binaries compiled with the Version 3.0
    libraries.

 Return value

    On successful completion, the address at which the segment was attached
    is returned.  Otherwise, -1 is returned, and errno is set to indicate the
    error.  errno is set to EINVAL if a process does an sdget on a shared
    data segment to which it is already attached.  errno is set to EEXIST if
    a process tries to create a shared data segment that exists and is in
    use.  errno is set to ENOTNAM if a process attempts an sdget on a file
    that exists but is not a shared data type.

    The mode parameter must be included on the first call of the sdget func-
    tion.

 See also

    sbrk(S), sdenter(S), sdgetv(S)

 Standards conformance

    sdget and sdfree are not part of any currently supported standard; they
    are an extension of AT&T System V provided by the Santa Cruz Operation.


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026