*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> pwrite (2)              
Title
Content
Arch
Section
 

write(2)

Contents


NAME    [Toc]    [Back]

       write, pwrite, writev - Write to a file

SYNOPSIS    [Toc]    [Back]

       #include <unistd.h>

       ssize_t write(
               int filedes,
               const void *buffer,
               size_t nbytes ); ssize_t pwrite(
               int filedes,
               const void *buffer,
               size_t nbytes,
               off_t offset ); #include <sys/uio.h>

       ssize_t writev(
               int filedes,
               const struct iovec *iov,
               int iov_count );

STANDARDS    [Toc]    [Back]

       Interfaces  documented  on  this reference page conform to
       industry standards as follows:

       write(), writev(): XSH4.0, XSH4.2, XSH5.0, XNS5.0

       pwrite(): POSIX.1, XSH5.0

       Unless otherwise stated, when text is tagged with an indicator
  for a particular revision of a standard, the information
 applies when the application is built in a compilation
  environment that adheres to the specified and higher
       revisions of that standard. Refer to the standards(5) reference
  page for more information about industry standards
       and associated tags.

PARAMETERS    [Toc]    [Back]

       Identifies the file to which the data is  to  be  written.
       Points  to  the  buffer containing the data to be written.
       Specifies the number of bytes to write to the file associated
  with  the  filedes parameter.  Specifies the desired
       start position inside the file associated with the filedes
       parameter.   Points to an array of iovec structures, which
       identifies the buffers containing the data to be  written.
       The  iovec  structure  is  defined in the sys/uio.h header
       file and contains the following members:

              void *iov_base; size_t iov_len; Specifies the  number
  of  iovec  structures  pointed  to  by the iov
              parameter.

DESCRIPTION    [Toc]    [Back]

       The write() function attempts to write nbytes of  data  to
       the  file  associated  with the filedes parameter from the
       buffer pointed to by the buffer parameter.

       If the nbytes parameter is 0 (zero), the write()  function
       returns 0 (zero) and has no other results if the file is a
       regular file.

       [XNS5.0]  If filedes refers to a socket, a write() request
       is equivalent to a send() request with no options set.

       The pwrite() function performs the same action as write(),
       except that it writes into a given position  in  the  file
       (specified  by  the offset parameter) without changing the
       file pointer.

       The writev() function performs  the  same  action  as  the
       write()  function,  but  gathers  the output data from the
       iov_count buffers specified by the array of  iovec  structures
  pointed  to  by the iov parameter. Each iovec entry
       specifies the base address and length of an area in memory
       from which data should be written. The iov_count parameter
       is valid if greater than 0 (zero) and less than  or  equal
       to  IOV_MAX,  which  is  defined  in the <limits.h> header
       file. The writev() function always writes a complete  area
       before proceeding to the next.

       If filedes refers to a regular file and all of the iov_len
       members in the array pointed  to  by  iov  are  0  (zero),
       writev() returns 0 and has no other effect.

       With  regular  files  and  devices capable of seeking, the
       actual writing of data proceeds from the position  in  the
       file  indicated  by the file pointer.  If this incremented
       file pointer is greater than the length of the  file,  the
       length of the file is set to this file offset. Upon return
       from the write() or pwrite() function,  the  file  pointer
       increments by the number of bytes actually written.

       If  the  O_SYNC flag of the file status options is set and
       the filedes parameter refers to a regular file, a successful
  write()  or  pwrite()  call does not return until the
       data is delivered to the underlying hardware, as described
       in open(2).

       With  devices  incapable  of seeking, writing always takes
       place starting at the current position.  The  value  of  a
       file pointer associated with such a device is undefined.

       If  the  O_APPEND  flag of the file status options is set,
       the file offset is set to the end of  the  file  prior  to
       each write, and no intervening file modification operation
       occurs between changing the  file  offset  and  the  write
       operation.

       If a write() or pwrite() requests that more bytes be written
 than there is space for (for example, the ulimit()  or
       the physical end of a medium), only as many bytes as there
       is space for are written. For example,  suppose  there  is
       space for 20 bytes more in a file before reaching a limit.
       A write of 512 bytes returns  20.  The  next  write  of  a
       nonzero number of bytes will give a failure return (except
       as noted below) and [XSH4.2]   a SIGXFSZ signal is  generated
 for the process.

       If a write() or pwrite() function is interrupted by a signal
 before it writes any data, it returns  -1  with  errno
       set to [EINTR].

       If a write() or pwrite() function is interrupted by a signal
 after it successfully writes some data, it returns the
       number of bytes written.

       After a write() or pwrite() to a regular file has successfully
 returned: Any successful read() from each byte position
  in  the file that was modified by that write returns
       the data specified by the write()  or  pwrite()  for  that
       position  until  such  byte  positions are again modified.
       Any subsequent successful write() or pwrite() to the  same
       byte position in the file overwrites that file data.

       Write requests to a pipe (or FIFO) are handled the same as
       a regular file with the following exceptions: There is  no
       file  offset associated with a pipe; hence each write() or
       pwrite() request appends to the end of the pipe.   If  the
       size  of  the  write() or pwrite() request is less than or
       equal to the value of the PIPE_BUF  system  variable,  the
       write()  or  pwrite() call is guaranteed to be atomic. The
       data is not interleaved with  data  from  other  processes
       doing  writes  on  the  same  pipe. Writes of greater than
       PIPE_BUF bytes can have  data  interleaved,  on  arbitrary
       boundaries, with writes by other processes, whether or not
       O_NONBLOCK is set.

              [Tru64 UNIX]  This  also  applies  whether  or  not
              O_NDELAY is set.  If O_NONBLOCK is clear, a write()
              or pwrite() request to a full pipe causes the  process
  to block until enough space becomes available
              to handle the entire request.

              [Tru64 UNIX]  This  also  applies  if  O_NDELAY  is
              clear.   If  the O_NONBLOCK flag is set, write() or
              pwrite() requests are handled  differently  in  the
              following  ways:  the  function does block the process;
 requests for PIPE_BUF or fewer  bytes  either
              succeed  completely and return nbytes, or return -1
              and set errno to [EAGAIN]. A  request  for  greater
              than  PIPE_BUF bytes either transfers as much as it
              can and returns the number  of  bytes  written,  or
              transfers  no data and returns -1 with errno set to
              [EAGAIN].  Also,  if  a  request  is  greater  than
              PIPE_BUF  bytes  and all data previously written to
              the pipe has been read, write() or pwrite()  transfers
 at least PIPE_BUF bytes.

              [Tru64 UNIX]  This also applies if O_NDELAY is set.

       When attempting to write to a file descriptor (other  than
       a  pipe  or  a  FIFO) that supports nonblocking writes and
       cannot accept data immediately, the write()  and  pwrite()
       functions  behave  as follows: If O_NONBLOCK is clear, the
       function blocks until the data can be accepted.

              [Tru64 UNIX]  This  also  applies  if  O_NDELAY  is
              clear.  If O_NONBLOCK is set, the function does not
              block the process. Instead, if  some  data  can  be
              written  without blocking the process, it writes as
              much as it can and  returns  the  number  of  bytes
              written.  Otherwise, it returns -1 and errno is set
              to [EAGAIN].

              [Tru64 UNIX]  This also applies if O_NDELAY is set,
              except 0 (zero) is returned.

       [Tru64  UNIX]  When  attempting to write to a regular file
       with enforcement mode record locking enabled  and  all  or
       part  of  the  region to be written is currently locked by
       another process, the write() and pwrite() functions behave
       as  follows:  If  O_NDELAY  and  O_NONBLOCK are clear (the
       default), the calling process  blocks  until  all  of  the
       blocking locks are removed or until the function is terminated
 by a signal.  If O_NDELAY or O_NONBLOCK is set,  the
       function returns --1 and sets errno to [EAGAIN].

       Upon  successful completion, the write() or pwrite() function
 marks the st_ctime and st_mtime fields  of  the  file
       for  update and, if the file is a regular file, clears its
       set-user ID and set-group ID attributes.


       The fcntl(2)  reference  page  provides  more  information
       about record locks.

   Writing Data to STREAMS Files    [Toc]    [Back]
       [XSH4.2]  For  STREAMS files, the operation of write() and
       pwrite() is determined by the values of  the  minimum  and
       maximum  nbytes  range  ("packet  size"  accepted  by  the
       STREAM). These values are contained in the topmost  STREAM
       module.  Unless  the user pushes the topmost module, these
       values cannot be set or tested from user level (see I_PUSH
       on  the  streamio(7))  reference  page).  If  nbytes falls
       within the packet size range, nbytes bytes are written. If
       nbytes  does  not  fall  within  the range and the minimum
       packet size value is 0 (zero), write() or pwrite()  breaks
       the  buffer  into  maximum  packet  size segments prior to
       sending the data downstream (the last segment may  contain
       less  than  the  maximum packet size).  If nbytes does not
       fall within the range and the minimum  value  is  nonzero,
       write()  or  pwrite()  fails  with  errno set to [ERANGE].
       Writing a zero-length buffer (nbytes is 0) sends  0  bytes
       with  0 returned. However, writing a zero-length buffer to
       a STREAMS-based pipe or FIFO sends no  message  and  0  is
       returned.  The  process  may  issue  the  I_SWROPT ioctl()
       request to enable zero-length messages to be  sent  across
       the pipe or FIFO.

       [XSH4.2]    When  writing  to  a STREAM, data messages are
       created with a priority band of 0 (zero). When writing  to
       a  STREAM  that  is  not  a  pipe or FIFO, the write() and
       pwrite() functions behave as  follows:  If  O_NONBLOCK  is
       clear  and  the  STREAM  cannot  accept data (that is, the
       STREAM write queue is full due to  internal  flow  control
       conditions),   the  function  blocks  until  data  can  be
       accepted.

              [Tru64 UNIX]  This  also  applies  if  O_NDELAY  is
              clear.   If O_NONBLOCK is set and the STREAM cannot
              accept data, the function returns -1 and sets errno
              to [EAGAIN].

              [Tru64 UNIX]  This also applies if O_NDELAY is set.
              If O_NONBLOCK is set and part  of  the  buffer  has
              been  written  when a condition occurs in which the
              STREAM cannot accept additional data, the  function
              terminates and returns the number of bytes written.

              [Tru64 UNIX]  This also applies if O_NDELAY is set.

       [XSH4.2]  In  addition,  write(),  pwrite(),  and writev()
       will fail if the STREAM head had processed an asynchronous
       error  before  the  call. In this case, the value of errno
       does not reflect  the  result  of  write(),  pwrite(),  or
       writev(), but reflects the prior error.





NOTES    [Toc]    [Back]

       [Tru64  UNIX]  For  compatibility  with  earlier releases,
       values for iov_len that are greater than or equal to  2^63
       will be treated as zero.

       [Tru64  UNIX]  The  write(),  pwrite(), and writev() functions,
 which suspend the calling process until the request
       is  completed,  are  redefined  so  that  only the calling
       thread is suspended.

       [Tru64 UNIX]  When debugging a module  that  includes  the
       writev()  function,  use _Ewritev to refer to the writev()
       call.

       When a read(), pread(), write(), or pwrite()  system  call
       on  a  pipe  is  interrupted by a signal and no bytes have
       been transferred through  the  pipe,  a  value  of  -1  is
       returned  and  errno  is  set to [EINTR]. This behavior is
       different from previous releases in which both read()  and
       write()  either  restarted  the  transfer  or set errno to
       [EINTR], depending on the setting of the SA_RESTART option
       for the interrupting signal.

       As  a  result of this change, applications must now either
       handle the [EINTR] error or block any expected signals for
       the  duration of the read(), pread(), write(), or pwrite()
       operation.

RETURN VALUES    [Toc]    [Back]

       Upon successful completion, the write() or pwrite()  function
  returns  the number of bytes actually written to the
       file associated with the filedes parameter. This number is
       never  greater  than  nbytes.  Otherwise, a value of -1 is
       returned and errno is set to indicate the error.

       Upon successful completion, the writev() function  returns
       the number of bytes that were actually written. Otherwise,
       a value  of  -1  is  returned,  the  file-pointer  remains
       unchanged, and errno is set to indicate the error.

   End-of-Media Handling for Tapes    [Toc]    [Back]
       If  writing  goes beyond the "early warning" EOT indicator
       while this indicator is disabled, the  write(),  pwrite(),
       and  writev()  functions  will  return the number of bytes
       actually written.  The  write(),  pwrite(),  and  writev()
       functions  return  a  value of -1, if: Attempting to write
       past the "real" EOT.   Attempting  to  write  past  "early
       warning" EOT indicator while this indicator is enabled.

       Refer to mtio(7) for information on enabling and disabling
       "early warning" EOT.

   End-of-Media Handling for Disks    [Toc]    [Back]
       Disk end-of-media handling is POSIX-compliant.  Attempting
       to  write  at  or  beyond the end of a partition returns a
       value of -1. A partial write returns the number  of  bytes
       actually written.

       Note: A partial write is a request that spans the end of a
       partition.





ERRORS    [Toc]    [Back]

       The write(), pwrite(), and writev() functions set errno to
       the  specified  values  for  the following conditions: The
       O_NONBLOCK flag is set on this file and the process  would
       be delayed in the write operation.

              [Tru64  UNIX]  An  attempt  was  made to write to a
              STREAM that cannot  accept  data  with  either  the
              O_NDELAY or O_NONBLOCK flag set.

              [Tru64  UNIX]  An  enforcement  mode record lock is
              outstanding in the portion of the file that  is  to
              be written.  The filedes parameter does not specify
              a valid file descriptor that is open  for  writing.
              [Tru64  UNIX]  Enforced  record locking is enabled,
              O_NDELAY is clear,  and  a  deadlock  condition  is
              detected.   [Tru64  UNIX]  The write failed because
              the user's disk block quota is  exhausted.   [Tru64
              UNIX]  The  buffer  parameter  or  part  of the iov
              parameter points to a location  outside  the  allocated
 address space of the process.  An attempt was
              made to write a file that exceeds the maximum  file
              size.   A  write()  or pwrite() on a pipe is interrupted
 by a signal and no bytes  have  been  transferred
  through  the pipe.  [XSH4.2]  The STREAM or
              multiplexer  referenced  by   filedes   is   linked
              (directly  or  indirectly) downstream from a multiplexer.


              [XSH4.2]  The iov_count parameter  value  was  less
              than or equal to 0 or greater than IOV_MAX.

              [XSH4.2]  The  sum of the iov_len values in the iov
              array would overflow an ssize_t buffer.

              [Tru64 UNIX]  The file position pointer  associated
              with the filedes parameter was negative.

              [Tru64  UNIX]  One of the iov_len values in the iov
              array was negative or the sum overflowed  a  32-bit
              integer.   [XSH4.2]  A physical I/O error occurred.
              These errors do not always occur with  the  associated
  function,  but  can occur with the subsequent
              function.  [Tru64 UNIX]  The file  has  enforcement
              mode  file  locking  set,  and  allocating  another
              locked region would exceed the configurable  system
              limit  of NLOCK_RECORD.  [XSH4.2]  No free space is
              left on the file system containing the file.

              [Tru64 UNIX]  An attempt was made to write past the
              "early   warning"  EOT  while  this  indicator  was
              enabled.

              [Tru64 UNIX]  An attempt was made to  write  at  or
              beyond  the end of a partition.  [XSH4.2]  A hangup
              occurred on the STREAM being written to.

              The device associated  with  file  descriptor  (the
              filedes  parameter)  is  a  block special device or
              character special file, and the file pointer is out
              of  range.   [Tru64  UNIX]  An  attempt was made to
              write to a socket or type SOCK_STREAM that  is  not
              connected  to  a peer socket.  [XSH4.2]  An attempt
              was made to write to a pipe that has only  one  end
              open.

              An attempt was made to write to a pipe or FIFO that
              is not opened for reading by any process. A SIGPIPE
              signal  is  sent  to  the  process.   [XSH4.2]  The
              transfer request size was outside  the  range  supported
 by the STREAMS file associated with filedes.

       In addition, the pwrite()  function  fails  and  the  file
       pointer  remains  unchanged  if the following is true: The
       file specified by fildes is  associated  with  a  pipe  or
       FIFO.

       [XSH4.2]  A  write  to a STREAMS file can fail if an error
       message has been received at  the  STREAM  head.  In  this
       case, errno is set to the value included in the error message.


       For NFS file access, if the write(), pwrite(), or writev()
       function  fails,  errno may also be set to one of the following
 values: [Tru64 UNIX]   For filesystems mounted with
       the  nfsv2  option,  the process attempted to write beyond
       the 2 gigabyte boundary.  [Tru64 UNIX]   The named file is
       a directory and write access is requested.  [Tru64 UNIX]
       Insufficient resources, such as buffers, are available  to
       complete  the  call.   Typically, a call used with sockets
       has failed due to a shortage of  message  or  send/receive
       buffer  space.  [Tru64 UNIX]   The named file resides on a
       read-only  file  system  and  write  access  is  required.
       [Tru64  UNIX]    The  NFS  file handle is stale. An opened
       file was deleted by the server or another client, a client
       cannot  open  a  file  because the server has unmounted or
       unexported the remote directory,  or  the  directory  that
       contains an opened file was either unmounted or unexported
       by the server.

       If the write(), pwrite(), or writev() function fails while
       in  the  System V habitat, errno may also be set to one of
       the following errors: [Tru64 UNIX]   A  write  to  a  pipe
       (FIFO)  of PIPE_BUF bytes or less is requested, O_NONBLOCK
       is set, and less than nbytes bytes of free space is available.


              [Tru64  UNIX]  Enforced record locking was enabled,
              O_NDELAY or  O_NONBLOCK  was  set  and  there  were
              record-locks  on  the  file, or O_NONBLOCK was set,
              and data cannot be  accepted  immediately.   [Tru64
              UNIX]    The  sum  of the iov_len values in the iov
              array  overflowed  an  integer.    [Tru64   UNIX]
              Attempts  to write to a STREAM with nbytes are outside
 the specified minimum and maximum  range,  and
              the minimum value is non-zero.

SEE ALSO    [Toc]    [Back]

      
      
       Functions:   fcntl(2),   getmsg(2),   lseek(2),   open(2),
       pipe(2), poll(2), select(2), lockf(3), ulimit(3)

       Files: mtio(7)

       Standards: standards(5)



                                                         write(2)
[ Back ]
 Similar pages
Name OS Title
AFreadmisc IRIX read from / write to / move logical read/write pointer for data in a miscellaneous chunk in an audio file
AFclosefile IRIX close an audio file, update file header if file was opened for write access.
sat_write_filehdr IRIX write audit file header, write close time to audit file header
AFsyncfile IRIX write out a consistent snapshot of an audio file without actually closing the file
efi_fsinit HP-UX write an EFI file system header on a device file
write HP-UX write on a file
pwrite HP-UX write on a file
write IRIX write on a file
writev HP-UX write on a file
VOP_READ FreeBSD read or write a file
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service