Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ write(2) — DG/UX 4.00

Media Vault

Software Library

Restoration Projects

Artifacts Sought



                                                                 write(2)



        _________________________________________________________________
        write                                                 System Call
        Write to an object.
        _________________________________________________________________


        SYNTAX

        int   write  (fildes, buffer, nbyte)
        int             fildes;
        char            buffer[];
        unsigned        nbyte;


        PARAMETERS

        fildes         An active, valid file descriptor.


        buffer         User data buffer.


        nbyte          Size (in bytes) of the user data buffer.


        DESCRIPTION

        Write transfers <nbyte> bytes of data from the buffer pointed to
        by <buffer> into the object associated with <fildes>.

        If <fildes> refers to an object pointer having a current position
        attribute and the O_APPEND flag is clear, the write starts at a
        position in the object given by that attribute.

        If <fildes> refers to an object pointer having a current position
        attribute and the O_APPEND flag is set, the position attribute of
        the object is set equal to the object's current size, where the
        write will start.

        If the object pointer has no position attribute, then the
        starting write position depends on the type of object being
        written.

        The behavior of the write call is affected by the object
        attribute flag O_NDELAY (see open(2)) associated with <fildes>.

        The behavior of writes to a pipe or FIFO depends on whether or
        not the request is for more than PIPE_BUF bytes.  PIPE_BUF is
        defined by <sys/limits.h> to be 5120.

        The behavior of writes to a pipe or FIFO depends on whether the



        DG/UX 4.00                                                 Page 1
               Licensed material--property of copyright holder(s)





                                                                 write(2)



        request is for more than PIPE_BUF bytes or not.  PIPE_BUF is
        defined by <sys/limits.h> to be 5120.

        If a write of <nbyte> bytes to a pipe (or FIFO) is requested, and
        <nbyte> is less than PIPE_BUF bytes, but <nbyte> of free space is
        currently not available in the pipe, then the following occurs:

        If the O_NDELAY flag is clear, the process will block until at
        least <nbyte> bytes of free space becomes available in the pipe,
        and the write will take place.

        If the O_NDELAY flag is set, [EAGAIN] is returned.

        If a write of more than PIPE_BUF bytes is requested, the
        following occurs:

        If the O_NDELAY flag is clear, the process will block if the pipe
        is full.  As space becomes available in the pipe, the data from
        the write request will be written piecemeal--in multiple smaller
        amounts until the request is fulfilled.  Thus, data from a write
        request of more than PIPE_BUF bytes may be interleaved on
        arbitrary byte boundaries with data written by other processes.

        If the O_NDELAY flag is set and the pipe is full, the process
        will not block and [EAGAIN] is returned.

        If the O_NDELAY flag is set and the pipe is not full, the process
        will not block, and as much data as will currently fit in the
        pipe will be written and that number of bytes is returned.

        The behavior of the write call is affected by the object
        attribute flag O_SYNC associated with <fildes>.  This flag causes
        the write call to block until both the file data and file status
        are physically updated.

        When write completes, the position attribute, if it exists, is
        incremented by the number of bytes actually written.  The
        modification time for the file and the changed time for the file
        status are updated to reflect the time the write occurred.

        If an error occurs, any changes to the object associated with
        <fildes> is defined by the object's type.  The default situation
        is that the object associated with <fildes> is unchanged.  This
        may not be the case for some errors on some types of objects.

        If write is successful and O_SYNC is not specified, the data
        transferred may not be transferred to long term storage (in the
        case of an `ordinary-disk-file' for example).  To ensure this is
        the case, the fsync operation should be used.





        DG/UX 4.00                                                 Page 2
               Licensed material--property of copyright holder(s)





                                                                 write(2)



        ACCESS CONTROL

        <Fildes> must be open for writing.


        RETURN VALUE

        0..<nbyte>     Completed successfully.  The number of bytes
                       actually written is returned.


        -1             An error occurred.  Errno is set to indicate the
                       error.


        EXCEPTIONS

        Errno may be set to one of the following error codes:


        EBADF          <Fildes> is not a valid file descriptor open for
                       writing.


        EAGAIN         The O_NDELAY flag was set and there was not enough
                       room in the pipe.


        EPIPE and SIGPIPE signal
                       An attempt is made to write to a pipe that is not
                       open for reading or a socket of type SOCK_STREAM
                       that is not connected to a peer socket.


        EFBIG          An attempt was made to write a file that exceeds
                       the process's file size limit or the maximum file
                       size.


        EFAULT         <Buffer> points outside the process's allocated
                       address space.


        EINTR          A signal was caught during the write system call.


        ENOLOCK        A lock required to complete the call can not be
                       allocated from the system lock table.


        EDEADLK        <fildes> refers to a file that has mandatory



        DG/UX 4.00                                                 Page 3
               Licensed material--property of copyright holder(s)





                                                                 write(2)



                       record locking enabled and the read would produce
                       a deadlock condition.


        SEE ALSO

        The related manual sections:  creat(2), dup(2), dup2(2),
        fcntl(2), ioctl(2), lseek(2), open(2), pipe(2), select(2),
        socket(2), socketpair(2), ulimit(2), writev(2).













































        DG/UX 4.00                                                 Page 4
               Licensed material--property of copyright holder(s)



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