Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
AIO_WRITE(2)		       System Calls Manual		    AIO_WRITE(2)

NAME
     aio_write,  aio_write2,  aio_writev  -- asynchronous write to a file (REAL-
     TIME)

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <aio.h>

     int
     aio_write(struct aiocb *iocb);

     int
     aio_write2(struct aiocb *iocb, int flags);

     #include <sys/uio.h>

     int
     aio_writev(struct aiocb *iocb);

DESCRIPTION
     The aio_write(), aio_write2(), and  aio_writev()  system  calls  allow  the
     calling  process to write to the descriptor iocb->aio_fildes.  The syscalls
     return immediately after the write request has been  enqueued  to	the  de-
     scriptor;	the write may or may not have completed at the time the call re-
     turns.

     The aio_write() call will write iocb->aio_nbytes from the buffer pointed to
     by  iocb->aio_buf,  whereas  aio_writev()	gathers  the   data   from   the
     iocb->aio_iovcnt  buffers specified by the members of the iocb->aio_iov ar-
     ray.

     If the request could not be enqueued, generally due to  invalid  arguments,
     the call returns without having enqueued the request.

     For aio_writev() the iovec structure is defined in writev(2).

     If  O_APPEND  is  set  for iocb->aio_fildes, write operations append to the
     file in the same order as the calls were made.  If O_APPEND is not set  for
     the  file descriptor, the write operation for aio_write() will occur at the
     absolute position from the beginning of the file plus iocb->aio_offset.

     The aio_write2() call takes the flags argument.   If  flags  is  passed  as
     zero, the call behaves identically to aio_write().  The following flags can
     be specified by logical or:

     AIO_OP2_FOFFSET   The write for non O_APPEND file descriptors occurs at the
		       file  descriptor  offset, which is advanced by the opera-
		       tion   as   done   by   the   write(2)	syscall.     The
		       iocb->aio_offset field is ignored.

     AIO_OP2_VECTORED  Similar	to aio_writev(), the write buffers are specified
		       by the aiocb->aio_iov array.

     The iocb pointer may be subsequently used as an  argument	to  aio_return()
     and  aio_error()  in  order to determine return or error status for the en-
     queued operation while it is in progress.

     If the request is successfully enqueued, the value of iocb->aio_offset  can
     be modified during the request as context, so this value must not be refer-
     enced after the request is enqueued.

     The iocb->aio_sigevent structure can be used to request notification of the
     operation's completion as described in aio(4).

RESTRICTIONS
     The  Asynchronous	I/O  Control  Block structure pointed to by iocb and the
     buffer that the iocb->aio_buf member of that structure references must  re-
     main valid until the operation has completed.

     The asynchronous I/O control buffer iocb should be zeroed before the system
     calls to avoid passing bogus context information to the kernel.

     Modifications of the Asynchronous I/O Control Block structure or the buffer
     contents are not allowed while the request is queued.

     If  the  file  offset  in	iocb->aio_offset  is past the offset maximum for
     iocb->aio_fildes, no I/O will occur.

RETURN VALUES
     The aio_write() and aio_writev() functions return the value 0  if	success-
     ful;  otherwise  the  value -1 is returned and the global variable errno is
     set to indicate the error.

ERRORS
     The aio_write(), aio_write2(), and aio_writev() system calls will fail if:

     [EAGAIN]		The request was not queued because  of	system	resource
			limitations.

     [EFAULT]		Part  of  aio_iov points outside the process's allocated
			address space.

     [EINVAL]		The	asynchronous	 notification	  method      in
			iocb->aio_sigevent.sigev_notify  is  invalid or not sup-
			ported.

     [EOPNOTSUPP]	Asynchronous write operations  on  the	file  descriptor
			iocb->aio_fildes  are unsafe and unsafe asynchronous I/O
			operations are disabled.

     The  following  conditions  may  be   synchronously   detected   when   the
     aio_write(),  aio_write2(),  or  aio_writev() system call is made, or asyn-
     chronously, at any time thereafter.  If they are detected at call time, the
     calls return -1 and set errno  appropriately;  otherwise  the  aio_return()
     system  call  must  be  called, and will return -1, and aio_error() must be
     called to determine the actual value  that  would	have  been  returned  in
     errno.

     [EBADF]		The  iocb->aio_fildes  argument  is  invalid,  or is not
			opened for writing.

     [EINVAL]		The offset iocb->aio_offset is not valid,  the	priority
			specified  by iocb->aio_reqprio is not a valid priority,
			or the number of bytes specified by iocb->aio_nbytes  is
			not valid.

     If  the  request  is successfully enqueued, but subsequently canceled or an
     error occurs, the value returned by the aio_return() system call is per the
     write(2) system call, and the value returned by the aio_error() system call
     is either one of the error returns from the write(2) system  call,  or  one
     of:

     [EBADF]		The iocb->aio_fildes argument is invalid for writing.

     [ECANCELED]	The  request  was  explicitly  canceled  via  a  call to
			aio_cancel().

     [EINVAL]		The offset iocb->aio_offset would be invalid.

SEE ALSO
     aio_cancel(2), aio_error(2),  aio_return(2),  aio_suspend(2),  aio_waitcom-
     plete(2), sigevent(3), siginfo(3), aio(4)

STANDARDS
     The  aio_write()  system call is expected to conform to the IEEE Std 1003.1
     ("POSIX.1") standard.

     The aio_write2() and aio_writev() system calls are FreeBSD extensions,  and
     should not be used in portable code.

HISTORY
     The   aio_write()	 system   call	first  appeared  in  FreeBSD  3.0.   The
     aio_writev() system call first appeared in FreeBSD 13.0.  The  aio_write2()
     system call first appeared in FreeBSD 14.1.

AUTHORS
     This manual page was written by Wes Peters <wes@softweyr.com>.

BUGS
     Invalid information in iocb->_aiocb_private may confuse the kernel.

FreeBSD ports 15.quarterly	 March 27, 2025 		    AIO_WRITE(2)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=aio_write&sektion=2&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help