Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sdget(S) — Xenix 2.3.4g

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sdenter(S)

sdgetv(S)

sbrk(S)



     SDGET(S)                 XENIX System V                  SDGET(S)



     Name
          sdget, sdfree - Attaches and detaches a shared data segment.

     Syntax
          #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:

          SD_RDONLY   Attach the segment for reading only.

          SD_WRITE    Attach the segment for both reading and writing.

          SD_CREAT    If the segment named by path exists and is not
                      in use (active), this flag will have the same
                      effect as creating a segment 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
                      meaningless.  The segment is initialized to
                      contain all zeroes.

          SD_UNLOCK   If the segment is created because of this call,
                      the segment will be 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 will be done before detaching the
          segment.

          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
          SD_CREAT flag in sdget. errno is set to EEXIST if a process
          tries to create a shared data segment that exists and is in



     Page 1                                           (printed 8/7/87)





     SDGET(S)                 XENIX System V                  SDGET(S)



          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 SD_UNLOCK 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 middle model programs that attempt
          to use shared data may run out of available 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 segments 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 restrictions 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.

     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() function.

     See Also
          sdenter(S), sdgetv(S), sbrk(S)

     Notes
          The size variable in sdget has changed from unsigned to long
          between  Version 3.0 and  System  V. Although this requires
          that source code be modified to use a long size parameter



     Page 2                                           (printed 8/7/87)





     SDGET(S)                 XENIX System V                  SDGET(S)



          when compiling with the System V libraries, an unsigned size
          parameter will still be correctly interpreted by the kernel
          when passed by binaries compiled with the Version 3.0
          libraries.



















































     Page 3                                           (printed 8/7/87)



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