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)