.help zardbf May84 "System Interface" .ih NAME zardbf -- asynchronous read from a binary file .ih SYNOPSIS .nf zardbf (chan, buf, maxbytes, loffset) int chan # OS channel assigned to file char buf[maxbytes] # output buffer int maxbytes # maximum number of bytes to read long loffset # file offset of first byte .fi .ih DESCRIPTION Initiate a read of at most \fImaxbytes\fR bytes from channel \fIchan\fR into the buffer \fIbuf\fR. If the file associated with \fIchan\fR is a blocked file the transfer begins at the one-indexed file offset \fIloffset\fR, specified in units of bytes. The file offset must be greater than or equal to 1 and less than or equal to the size of the file in bytes plus one. If the file is a streaming file the file offset argument is ignored. If the file is blocked \fIloffset\fR must be an integral multiple of the device block size, i.e., the transfer must be aligned on a device block boundary. At most \fImaxbytes\fR bytes are read. If the physical file block is larger than \fImaxbytes\fR bytes the additional data is discarded. A read from a streaming file returns the next physical block in the file. Successive blocks may vary in size; the size of a block is fixed when the block is written (appended) to the file by \fBzawrbf\fR. If \fBzawrbf\fR writes a block of length N bytes, the corresponding call to \fBzardbf\fR will return either N bytes or \fImaxbytes\fR bytes, whichever is smaller, discarding any additional data if \fImaxbytes\fR is less than N. .ih RETURN VALUE The wait primitive \fBzawtbf\fR must be called after every asynchronous read to get the transfer status. ERR is returned if a read error occurs or if the channel number or file offset is illegal. If the read operation is successful the actual number of bytes read is returned; zero is returned for a read at EOF. .ih NOTES The transfer is NOT guaranteed to be asynchronous and the calling program must not assume that \fBzardbf\fR will return immediately. The \fBzawtbf\fR primitive must be called and the status checked before another i/o request is issued to the channel. Only a single request may be pending on a channel at a time. This primitive is called by the FIO routine \fBaread\fR which verifies that the transfer is aligned and in-bounds, that a transfer is not already in progress, and so on before calling \fBzardbf\fR. A request to read zero bytes will not be passed to \fBzardbf\fR and should be considered an error to avoid confusion with a read at EOF. .ih SEE ALSO zawtbf, zawrbf, zfiobf .endhelp