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

FreeBSD Manual Pages

  
 
  

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

NAME
       lio_listio -- list directed I/O (REALTIME)

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<aio.h>

       int
       lio_listio(int mode,	  struct aiocb * const list[],	     int nent,
	   struct sigevent *sig);

DESCRIPTION
       The lio_listio()	function initiates a list of I/O requests with a  sin-
       gle  function call.  The	list argument is an array of pointers to aiocb
       structures describing each operation to perform,	 with  nent  elements.
       NULL elements are ignored.

       The  aio_lio_opcode  field  of each aiocb specifies the operation to be
       performed.  The following operations are	supported:

       LIO_READ	  Read data as if by a call to aio_read(2).

       LIO_READV  Read data as if by a call to aio_readv(2).

       LIO_NOP	  No operation.

       LIO_WRITE  Write	data as	if by a	call to	aio_write(2).

       LIO_WRITEV
		  Write	data as	if by a	call to	aio_writev(2).

       If the LIO_READ,	LIO_READV, LIO_WRITE,  LIO_WRITEV  opcodes  are	 or-ed
       with  the  LIO_FOFFSET  flag, the corresponding read or write operation
       uses the	current	file descriptor	 offset	 instead  of  aio_offset  from
       aiocb.

       If  the	mode  argument is LIO_WAIT, lio_listio() does not return until
       all  the	 requested  operations	have  been  completed.	 If  mode   is
       LIO_NOWAIT,  sig	 can be	used to	request	asynchronous notification when
       all operations have completed.  If sig  is  NULL,  no  notification  is
       sent.

       For SIGEV_KEVENT	notifications, the posted kevent will contain:

       Member	 Value
       ident	 list
       filter	 EVFILT_LIO
       udata	 value stored in sig->sigev_value

       For  SIGEV_SIGNO	and SIGEV_THREAD_ID notifications, the information for
       the queued signal will include SI_ASYNCIO in the	si_code	field and  the
       value stored in sig->sigev_value	in the si_value	field.

       For SIGEV_THREAD	notifications, the value stored	in sig->sigev_value is
       passed to the sig->sigev_notify_function	as described in	sigevent(3).

       The  order  in  which the requests are carried out is not specified; in
       particular, there is no guarantee that they will	be executed in the or-
       der 0, 1, ..., nent-1.

RETURN VALUES
       If mode is LIO_WAIT, the	lio_listio() function returns 0	if the	opera-
       tions completed successfully, otherwise -1.

       If mode is LIO_NOWAIT, the lio_listio() function	returns	0 if the oper-
       ations are successfully queued, otherwise -1.

ERRORS
       The lio_listio()	function will fail if:

       [EAGAIN]		  There	 are  not  enough resources to enqueue the re-
			  quests.

       [EAGAIN]		  The  request	would  cause  the  system-wide	 limit
			  {AIO_MAX} to be exceeded.

       [EINVAL]		  The	mode   argument	  is   neither	 LIO_WAIT  nor
			  LIO_NOWAIT,	 or    nent    is     greater	  than
			  {AIO_LISTIO_MAX}.

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

       [EINTR]		  A signal interrupted the system call before it could
			  be completed.

       [EIO]		  One or more requests failed.

       In addition, the	lio_listio() function may fail for any of the  reasons
       listed for aio_read(2) and aio_write(2).

       If lio_listio() succeeds, or fails with an error	code of	EAGAIN,	EINTR,
       or  EIO,	 some  of  the	requests  may have been	initiated.  The	caller
       should check the	error status of	each aiocb structure  individually  by
       calling aio_error(2).

SEE ALSO
       aio_error(2),  aio_read(2),  aio_readv(2), aio_write(2),	aio_writev(2),
       read(2),	write(2), sigevent(3), siginfo(3), aio(4)

STANDARDS
       The  lio_listio()  function  is	expected  to  conform  to   IEEE   Std
       1003.1-2001  ("POSIX.1").   The LIO_READV and LIO_WRITEV	operations are
       FreeBSD extensions, and should not be used in portable code.

HISTORY
       The lio_listio()	system call first appeared in FreeBSD 3.0.

FreeBSD	13.2		       January 13, 2024			 LIO_LISTIO(2)

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

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

home | help