Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought



     SOPEN(DOS)               XENIX System V                SOPEN(DOS)



     Name
          sopen - Opens a file for shared reading and writing.

     Syntax
          #include <fcntl.h>
          #include <sys/types.h>
          #include <sys/stat.h>
          #include <share.h>
          #include <io.h>

          int sopen (pathname, oflag, shflag[, pmode]);
          char *pathname;
          int oflag;
          int shflag;
          int pmode;

     Description
          The sopen function opens the file specified by pathname and
          prepares the file for subsequent shared reading or writing
          as defined by oflag and shflag.  oflag is an integer
          expression formed by combining one or more of the following
          manifest constants, defined in fcntl.h.  When more than one
          manifest constant is given, the constants are joined with
          the OR operator (|).

            Oflag       Meaning

            O_APPEND   Reposition the file pointer to the
                       end of the file before every write
                       operation.

            O_CREAT    Create and open a new file; this
                       has no effect if the file specified
                       by pathname exists.

            O_EXCL     Return an error value if the file
                       specified by pathname exists.  Only
                       applies when used with O_CREAT.

            O_RDONLY   Open file for reading only; if this
                       flag is given, neither O_RDWR nor
                       O_WRONLY may be given.

            O_RDWR     Open file for both reading and
                       writing; if this flag is given,
                       neither O_RDONLY nor O_WRONLY may
                       be given.








     Page 1                                           (printed 8/7/87)





     SOPEN(DOS)               XENIX System V                SOPEN(DOS)



            O_TRUNC    Open and truncate an existing file
                       to 0 length; the file must have
                       write permission, and the contents
                       of the file are destroyed.

            O_WRONLY   Open file for writing only; if this
                       flag is given, neither O_RDONLY nor
                       O_RDWR may be given.

            O_BINARY   Open file in binary (untranslated)
                       mode.  (See fopen for a description
                       of binary mode.)

            O_TEXT     Open file in text (translated)
                       mode.  (See fopen for a description
                       of text mode.)

          _TRUNC destroys the complete contents of an existing file.
          Use with care.

          Shflag is a constant expression consisting of one of the
          following manifest constants, defined in share.h. See your
          MS-DOS documentation for detailed information on sharing
          modes.

            Shflag        Meaning

            SH_COMPAT     Set compatibility mode.

            SH_DENYRW     Deny read and write access to file.

            SH_DENYWR     Deny write access to file.

            SH_DENYRD     Deny read access to file.

            SH_DENYNONE   Permit read and write access.

          The pmode argument is required only when _CREAT is
          specified.  If the file does not exist, pmode specifies the
          file's permission settings, which are set when the new file
          is closed for the first time.  Otherwise, the pmode argument
          is ignored.  The pmode argument is an integer expression
          containing one or both of the manifest constants S_IWRITE
          and S_IREAD, defined in sys/stat.h. When both constants are
          given, they are joined with the OR operator (|).  The
          meaning of the pmode argument is as follows:

            Value                Meaning
            S_IWRITE             Writing permitted

            S_IREAD              Reading permitted




     Page 2                                           (printed 8/7/87)





     SOPEN(DOS)               XENIX System V                SOPEN(DOS)



            S_IREAD | S_IWRITE   Reading and writing permitted


          If write permission is not given, the file is read-only.
          Under MS-DOS all files are readable; it is not possible to
          give write-only permission.  Thus, the modes S_IWRITE and
          S_IREAD | S_IWRITE are equivalent.

          sopen applies the current file permission mask to pmode
          before setting the permissions (see umask).

     Return Value
          sopen returns a file handle for the opened file.  A return
          value of -1 indicates an error, and errno is set to one of
          the following values:

            Value Meaning

            EACCES          Given pathname is a directory; or
                            the file is read-only but an open
                            for writing was attempted; or a
                            sharing violation occurred (the
                            file's sharing mode does not allow
                            the specified operations; MS-DOS
                            versions 3.0 or later only).

            EEXIST          The _CREAT and _EXCL flags are
                            specified but the named file
                            already exists.

            EINVAL          SHARE.COM not installed.

            EMFILE          No more file handles available (too
                            many open files).

            ENOENT          File or pathname not found.

     See  Also
          close(S), creat(S), fopen(S), open(S), umask(S)
















     Page 3                                           (printed 8/7/87)





     SOPEN(DOS)               XENIX System V                SOPEN(DOS)



     Example
          #include <fcntl.h> #include <sys/types.h> #include
          <sys/stat.h> #include <share.h> #include <io.h>

          extern unsigned char _osmajor; int fh;

                       /* The _osmajor variable is used to test
                       ** the MS-DOS version number before
                       ** calling sopen.               */

          if (_osmajor >= 3)              fh = sopen ("data", O_RDWR |
          O_BINARY, SH_DENYRW); else              fh = open ("data",
          O_RDWR | O_BINARY);

     Notes
          The sopen function should be used only under MS-DOS version
          3.0 or later.  Under earlier versions of MS-DOS, the shflag
          argument is ignored.

          File sharing modes will not work correctly for buffered
          files, so do not use fdopen to associate a file opened for
          sharing (or locking) with a stream.

          This call must be compiled with the -dos flag.































     Page 4                                           (printed 8/7/87)



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