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 (RE-
       ALTIME)

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 descriptor; the write may or may	not have completed at the time
       the call	returns.

       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 array.

       If the request could not	be enqueued, generally due  to	invalid	 argu-
       ments, 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
			 operation  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	speci-
			 fied 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 sta-
       tus for the enqueued 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 referenced 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
       remain 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 suc-
       cessful;	otherwise the value -1 is returned and the global variable er-
       rno 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 re-
			  source limitations.

       [EFAULT]		  Part of aio_iov points outside the  process's	 allo-
			  cated	address	space.

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

       [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
       asynchronously, 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	prior-
			  ity  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 writ-
			  ing.

       [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_waitcomplete(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	13.2		       February	1, 2024			  AIO_WRITE(2)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RESTRICTIONS | RETURN VALUES | ERRORS | SEE ALSO | STANDARDS | HISTORY | AUTHORS | BUGS

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

home | help