AIO_READ(2)
β¨ AIO_READ(2) β¨
okay bestie, welcome to the aio_read page in the System Calls Manual π this is the "read from a file but make it asynchronous (REALTIME)" girlie, and she's iconic.
πΈ LIBRARY πΈ
Standard C Library (libc, -lc) β she lives in libc, obviously.
π SYNOPSIS π
#include <aio.h>
int
aio_read(struct aiocb *iocb);
π DESCRIPTION π
so the aio_read() system call lets the calling process read iocb->aio_nbytes from the descriptor iocb->aio_fildes, starting at the offset iocb->aio_offset, straight into the buffer pointed to by iocb->aio_buf. slay.
and here's the main character bit: the call returns immediately after the read request gets enqueued to the descriptor. so the read may or may not have actually finished by the time the call returns. it's giving "submitted my assignment, idk if it's graded yet" π
if _POSIX_PRIORITIZED_IO is defined, and the descriptor supports it, then the enqueued operation is submitted at a priority equal to that of the calling process minus iocb->aio_reqprio. math but make it β¨priorityβ¨.
the iocb->aio_lio_opcode argument? yeah, the aio_read() system call ignores it entirely. not her business, not her problem π
you can keep using that iocb pointer afterwards as an argument to aio_return() and aio_error() to figure out the return or error status of the enqueued operation while it's still in progress. so useful, so thoughtful π«Ά
if the request could not be enqueued (usually bc the arguments were invalid), then the call just returns without having enqueued anything. no harm, no foul.
β οΈ if the request is successfully enqueued, the value of iocb->aio_offset can be modified during the request as context β so that value must NOT be referenced after the request is enqueued. let it go, bestie.
the iocb->aio_sigevent structure can be used to request notification of the operation's completion, as described over in aio(4) π
π¦ RESTRICTIONS π¦
- The Asynchronous I/O Control Block structure pointed to by
iocband the buffer that theiocb->aio_bufmember of that structure references must remain valid until the operation has completed. no early exits, they gotta stay for the whole show. - The asynchronous I/O control buffer
iocbshould be zeroed before theaio_read()call, so you don't pass bogus context information to the kernel. zero it out, babe, it's the vibe β¨ - Modifications of the Asynchronous I/O Control Block structure or the buffer contents are not allowed while the request is queued. hands off π
- If the file offset in
iocb->aio_offsetis past the offset maximum foriocb->aio_fildes, then no I/O will occur. nothing. nada. it's giving ghosted π
β RETURN VALUES β
The aio_read() function returns the value 0 if successful. otherwise, the value -1 is returned and the global variable errno is set to indicate the error. classic.
π DIAGNOSTICS π
None. literally nothing. silence. π€
π ERRORS π
The aio_read() system call will fail if:
[EAGAIN]β The request was not queued because of system resource limitations. she's booked and busy, no room.[EINVAL]β The asynchronous notification method iniocb->aio_sigevent.sigev_notifyis invalid or not supported.[EOPNOTSUPP]β Asynchronous read operations on the file descriptoriocb->aio_fildesare unsafe and unsafe asynchronous I/O operations are disabled.
the following conditions may be detected synchronously when the aio_read() system call is made, or asynchronously, at any time thereafter. so like, whenever. if they get detected at call time, aio_read() returns -1 and sets errno appropriately; otherwise you must call the aio_return() system call (which will return -1) and you must call aio_error() to determine the actual value that would have been returned in errno.
[EBADF]β Theiocb->aio_fildesargument is invalid.[EINVAL]β The offsetiocb->aio_offsetis not valid, the priority specified byiocb->aio_reqpriois not a valid priority, or the number of bytes specified byiocb->aio_nbytesis not valid.[EOVERFLOW]β The file is a regular file,iocb->aio_nbytesis greater than zero, the starting offset iniocb->aio_offsetis before the end of the file, but is at or beyond theiocb->aio_fildesoffset maximum.
if the request is successfully enqueued but subsequently gets cancelled or an error occurs, then the value returned by the aio_return() system call is per the read(2) system call, and the value returned by the aio_error() system call is either one of the error returns from the read(2) system call, or one of these:
[EBADF]β Theiocb->aio_fildesargument is invalid for reading.[ECANCELED]β The request was explicitly cancelled via a call toaio_cancel().[EINVAL]β The offsetiocb->aio_offsetwould be invalid.
π SEE ALSO π
aio_cancel(2), aio_error(2), aio_return(2), aio_suspend(2), aio_waitcomplete(2), aio_write(2), sigevent(3), siginfo(3), aio(4)
go read those too, they're the friend group π
π STANDARDS π
The aio_read() system call is expected to conform to the IEEE Std 1003.1 (βPOSIX.1β) standard. certified, no cap β¨
π§ HISTORY π§
The aio_read() system call first appeared in FreeBSD 3.0. she's been around, she's a legend π«Ά
π AUTHORS π
This manual page was written by Terry Lambert <terry@whistle.com>. thank you for your service, king π
π BUGS π
Invalid information in iocb->_aiocb_private may confuse the kernel. so like... don't do that. the kernel is sensitive π
and that's the whole page bestie, you ate π this one's from the Debian crew, dated August 19, 2016 β mwah, historic β¨
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- Copyright (c) 1998 Terry Lambert
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms