READ(9P)                                                 READ(9P)

     NAME
          read, write - transfer data from and to a file

     SYNOPSIS
          size[4] Tread tag[2] fid[4] offset[8] count[4]
          size[4] Rread tag[2] count[4] data[count]

          size[4] Twrite tag[2] fid[4] offset[8] count[4] data[count]
          size[4] Rwrite tag[2] count[4]

     DESCRIPTION
          The read request asks for count bytes of data from the file
          identified by fid, which must be opened for reading, start-
          ing offset bytes after the beginning of the file.  The bytes
          are returned with the read reply message.

          The count field in the reply indicates the number of bytes
          returned.  This may be less than the requested amount.  If
          the offset field is greater than or equal to the number of
          bytes in the file, a count of zero will be returned.

          For directories, read returns an integral number of direc-
          tory entries exactly as in stat (see stat(9P)), one for each
          member of the directory.  The read request message must have
          offset equal to zero or the value of offset in the previous
          read on the directory, plus the number of bytes returned in
          the previous read.  In other words, seeking other than to
          the beginning is illegal in a directory.

          The write request asks that count bytes of data be recorded
          in the file identified by fid, which must be opened for
          writing, starting offset bytes after the beginning of the
          file.  If the file is append-only, the data will be placed
          at the end of the file regardless of offset. Directories may
          not be written.

          The write reply records the number of bytes actually writ-
          ten.  It is usually an error if this is not the same as
          requested.

          Because 9P implementations may limit the size of individual
          messages, more than one message may be produced by a single
          read or write call.  The iounit field returned by open(9P),
          if non-zero, reports the maximum size that is guaranteed to
          be transferred atomically.

     ENTRY POINTS
          Fsread and fswrite (see 9pclient(3)) generate the corre-
          sponding messages.  Because they take an offset parameter,
          the fspread and fspwrite calls correspond more directly to

     Page 1                       Plan 9             (printed 4/20/24)

     READ(9P)                                                 READ(9P)

          the 9P messages.  Although fsseek affects the offset, it
          does not generate a message.

     Page 2                       Plan 9             (printed 4/20/24)