read, write – transfer data from and to a file|
size Tread tag fid offset count|
size Rread tag count data[count]
size Twrite tag fid offset count data[count]
size Rwrite tag count
The read request asks for count bytes of data from the file identified
by fid, which must be opened for reading, starting 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 directory
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 written.
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.|
Fsread and fswrite (see 9pclient(3)) generate the corresponding
messages. Because they take an offset parameter, the fspread and
fspwrite calls correspond more directly to the 9P messages. Although
fsseek affects the offset, it does not generate a message.|