| .TH READ 9P |
| .SH NAME |
| read, write \- transfer data from and to a file |
| .SH SYNOPSIS |
| .ta \w'\fLTwrite 'u |
| .IR size [4] |
| .B Tread |
| .IR tag [2] |
| .IR fid [4] |
| .IR offset [8] |
| .IR count [4] |
| .br |
| .IR size [4] |
| .B Rread |
| .IR tag [2] |
| .IR count [4] |
| .IR data [ count ] |
| .PP |
| .IR size [4] |
| .B Twrite |
| .IR tag [2] |
| .IR fid [4] |
| .IR offset [8] |
| .IR count [4] |
| .IR data [ count ] |
| .br |
| .IR size [4] |
| .B Rwrite |
| .IR tag [2] |
| .IR count [4] |
| .SH DESCRIPTION |
| The |
| .B read |
| request |
| asks for |
| .I count |
| bytes of data |
| from the file identified by |
| .IR fid , |
| which must be opened for reading, |
| starting |
| .I offset |
| bytes after the beginning of the file. |
| The bytes are returned with the |
| .B read |
| reply message. |
| .PP |
| The |
| .I count |
| field in the reply indicates the number of bytes returned. |
| This may be less than the requested amount. |
| If the |
| .I offset |
| field is greater than or equal to the number of bytes in the file, |
| a count of zero will be returned. |
| .PP |
| For directories, |
| .B read |
| returns an integral number of |
| directory entries exactly as in |
| .B stat |
| (see |
| .IR stat (9P)), |
| one for each member of the directory. |
| The |
| .B read |
| request message must have |
| .B offset |
| equal to zero or the value of |
| .B offset |
| in the previous |
| .B read |
| on the directory, plus the number of bytes |
| returned in the previous |
| .BR read . |
| In other words, seeking other than to the beginning |
| is illegal in a directory. |
| .PP |
| The |
| .B write |
| request asks that |
| .I count |
| bytes of data be recorded in the file identified by |
| .IR fid , |
| which must be opened for writing, starting |
| .I 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 |
| .IR offset . |
| Directories may not be written. |
| .PP |
| The |
| .B write |
| reply records the number of bytes actually written. |
| It is usually an error |
| if this is not the same as requested. |
| .PP |
| Because 9P implementations may limit the size of individual |
| messages, |
| more than one message may be produced by a single |
| .I read |
| or |
| .I write |
| call. |
| The |
| .I iounit |
| field returned by |
| .IR open (9P), |
| if non-zero, reports the maximum size that is guaranteed |
| to be transferred atomically. |
| .SH ENTRY POINTS |
| .I Fsread |
| and |
| .I fswrite |
| (see |
| .IR 9pclient (3)) |
| generate the corresponding messages. |
| Because they take an offset parameter, the |
| .I fspread |
| and |
| .I fspwrite |
| calls correspond more directly to the 9P messages. |
| Although |
| .I fsseek |
| affects the offset, it does not generate a message. |