AIOREAD(3C) Standard C Library Functions AIOREAD(3C)
NAME
aioread, aiowrite - read or write asynchronous I/O operations
SYNOPSIS
#include <sys/types.h>
#include <sys/asynch.h>
int aioread(
int fildes,
char *bufp,
int bufs,
off_t offset,
int whence,
aio_result_t *resultp);
int aiowrite(
int fildes,
const char *bufp,
int bufs,
off_t offset,
int whence,
aio_result_t *resultp);
DESCRIPTION
The
aioread() function initiates one asynchronous
read(2) and returns
control to the calling program. The read continues concurrently with
other activity of the process. An attempt is made to read
bufs bytes
of data from the object referenced by the descriptor
fildes into the
buffer pointed to by
bufp.
The
aiowrite() function initiates one asynchronous
write(2) and
returns control to the calling program. The write continues
concurrently with other activity of the process. An attempt is made
to write
bufs bytes of data from the buffer pointed to by
bufp to the
object referenced by the descriptor
fildes.
On objects capable of seeking, the I/O operation starts at the
position specified by
whence and
offset. These parameters have the
same meaning as the corresponding parameters to the
llseek(2) function. On objects not capable of seeking the I/O operation always
start from the current position and the parameters
whence and
offset are ignored. The seek pointer for objects capable of seeking is not
updated by
aioread() or
aiowrite(). Sequential asynchronous
operations on these devices must be managed by the application using
the
whence and
offset parameters.
The result of the asynchronous operation is stored in the structure
pointed to by
resultp:
int aio_return; /* return value of read() or write() */
int aio_errno; /* value of errno for read() or write() */
Upon completion of the operation both
aio_return and
aio_errno are
set to reflect the result of the operation. Since
AIO_INPROGRESS is
not a value used by the system, the client can detect a change in
state by initializing
aio_return to this value.
The application-supplied buffer
bufp should not be referenced by the
application until after the operation has completed. While the
operation is in progress, this buffer is in use by the operating
system.
Notification of the completion of an asynchronous I/O operation can
be obtained synchronously through the
aiowait(3C) function, or
asynchronously by installing a signal handler for the
SIGIO signal.
Asynchronous notification is accomplished by sending the process a
SIGIO signal. If a signal handler is not installed for the
SIGIO signal, asynchronous notification is disabled. The delivery of this
instance of the
SIGIO signal is reliable in that a signal delivered
while the handler is executing is not lost. If the client ensures
that
aiowait() returns nothing (using a polling timeout) before
returning from the signal handler, no asynchronous I/O notifications
are lost. The
aiowait() function is the only way to dequeue an
asynchronous notification. The
SIGIO signal can have several meanings
simultaneously. For example, it can signify that a descriptor
generated
SIGIO and an asynchronous operation completed. Further,
issuing an asynchronous request successfully guarantees that space
exists to queue the completion notification.
The
close(2),
exit(2) and
execve(2)) functions block until all
pending asynchronous I/O operations can be canceled by the system.
It is an error to use the same result buffer in more than one
outstanding request. These structures can be reused only after the
system has completed the operation.
RETURN VALUES
Upon successful completion,
aioread() and
aiowrite() return
0. Upon
failure,
aioread() and
aiowrite() return
-1 and set
errno to indicate
the error.
ERRORS
The
aioread() and
aiowrite() functions will fail if:
EAGAIN The number of asynchronous requests that the system can
handle at any one time has been exceeded
EBADF The
fildes argument is not a valid file descriptor open for
reading.
EFAULT At least one of
bufp or
resultp points to an address
outside the address space of the requesting process. This
condition is reported only if detected by the application
process.
EINVAL The
resultp argument is currently being used by an
outstanding asynchronous request.
EINVAL The
offset argument is not a valid offset for this file
system type.
ENOMEM Memory resources are unavailable to initiate request.
USAGE
The
aioread() and
aiowrite() functions have transitional interfaces
for 64-bit file offsets. See
lf64(7).
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | Safe |
+---------------+-----------------+
SEE ALSO
close(2),
execve(2),
exit(2),
llseek(2),
lseek(2),
open(2),
read(2),
write(2),
aiocancel(3C),
aiowait(3C),
attributes(7),
lf64(7) May 13, 2017 AIOREAD(3C)