aio_read(3aio)
aio_read, aio_read64 --
asynchronous read
Synopsis
cc [options] -Kthread file
#include <aio.h>
int aio_read(struct aiocb *aiocbp);
int aio_read64(struct aiocb64 *aiocbp);
Description
aio_read supports an
asynchronous read capability that allows the calling process to read
aiocbp->aio_nbytes from the file associated with
the file descriptor aiocbp->aio_fildes
into the buffer pointed to by aiocbp->aio_buf.
aiocbp points to an aiocb
structure which contains other input parameters as well as completion
status members.
If you do not wish to be notified of completion,
you should set aio_sigevent.sigev_notify to
SIGEV_NONE in the asynchronous I/O control block.
If you require notification,
you must set the
aio_sigevent.sigev_notify
to SIGEV_CALLBACK,
aio_sigevent.sigev_func
to the address of the function to be called,
and aio_sigevent.sigev_value
to the argument to be passed to the function.
You may also want the
aio_sigevent.sigev_value
to be the address of the asynchronous I/O control
block that was used to initiate the I/O request.
[See
aiocb(5)].
If the control block pointed to by
aiocbp or the buffer pointed to by
aiocpb->aio_buf
becomes an invalid address prior to asynchronous I/O completion,
then the behavior is undefined.
The call to aio_read
returns 0 when the read request has been initiated or queued to the file
or device.
If an error condition is encountered during queuing,
the call returns -1 without having initiated or queued the request.
Return values
After successfully completing, calls to aio_read and aio_read64 return 0 and
the structure member aio_errno
is set to
EINPROGRESS.
If a call to aio_read or aio_read64 fails,
-1 is returned with errno set to indicate the error.
After the read operation has successfully completed, the
aio_error function is set to 0.
The return value of the underlying read can
be assessed with the aio_return function.
Errors
There are two types of errors that are associated with an asynchronous
I/O request.
The first occurs during the validity checking of the I/O request submitted
by the aio_read and aio_read64 routines.
This error is returned to the caller of
aio_read or aio_read64.
The other occurs during the processing of the actual read operation.
The read operation may fail for any of the reasons that a normal
read may fail.
If the call to aio_read or aio_read64
successfully queues the I/O operation but the operation
is canceled or encounters an error,
the aio_error function
returns one of the values normally returned by the
read system call or one of the errors listed below.
The time at which the error occurs is implementation-dependent;
for example, an invalid file descriptor may not be determined at the
time of the call to
aio_read or aio_read64 which could successfully
complete.
However, aio_error then returns
EBADF to indicate the error.
Under the following conditions, aio_read fails and sets errno
or the aio_errno
structure member to:
EOVERFLOW-
The file is a regular file,
aiocbp->aio_nbytes
is
greater than 0 and the starting offset in
aiocbp->aio_offset
is before the end-of-file
and is at or beyond the offset maximum in the open file
descriptor associated with aiocbp->aio_fildes
.
Under the following conditions, aio_read
and aio_read64 fail and set errno
or the aio_errno
structure member to:
EAGAIN-
The requested asynchronous I/O operation was not queued
because of system resource limitations.
EFAULT-
aiocbp or the aio_buf
member points outside the allocated address space.
ECANCELED-
The requested I/O was canceled before the I/O completed
because of aio_cancel.
EINVAL-
On SVR4.2, the request does not have the
AIO_RAW flag bit set in aio_flags.
ENOMEM-
There were no internal kernal aio control blocks available to service
the request (number of kernel aio control blocks is tunable via
the NUMAIO kernel parameter; see
``Miscellaneous parameters'' in Monitoring and tuning the system).
References
aio_cancel(3aio),
aiocb(5),
aio_suspend(3aio),
aio_write(3aio),
intro(2),
read(2)
Notices
When developing applications for both SVR4.2 and future versions, the
AIO_RAW
flag should be set in aio_flags to insure that performance is
maintained.
Considerations for large file support
aio_read64 supports large files, but is otherwise identical
to aio_read.
For details on programming for large file capable applications, see
``Large File Support''
on intro(2).
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004