Intel® oneAPI DPC++/C++ Compiler Developer Guide and Reference

ID 767253
Date 3/22/2024
Public
Document Table of Contents

Example for lio_listio Function

The following example illustrates how the lio_listio() function can be used.

// icx aio_sample6.c 
// aio_sample6.exe

#include <aio.h>
#include <stdio.h>
typedef struct aiocb  aiocb_t;
aiocb_t               my_aio;

#define IC_AIO_DATA_INIT(_aio, _fd, _dat, _len, _off)\
  {memset(&_aio, 0, sizeof(_aio)); \
   _aio.aio_fildes = _fd;          \
   _aio.aio_buf    = _dat;         \
   _aio.aio_nbytes = _len;         \
   _aio.aio_offset = _off;}

int main()
{
	static struct aiocb   aio[2];
	static struct aiocb  *aio_list[2] = {&aio[0], &aio[1]};
	int               i, ret;

	HANDLE fd = CreateFile("dat",
	   GENERIC_READ | GENERIC_WRITE,
	   FILE_SHARE_READ,
	   NULL,
	   OPEN_ALWAYS,
	   FILE_ATTRIBUTE_NORMAL,
	   NULL);

	/*
	** Data initialization and Synchronously writing
	*/
	IC_AIO_DATA_INIT(aio[0], fd, "rec#1\n", strlen("rec#1\n"), 0)
	IC_AIO_DATA_INIT(aio[1], fd, "rec#2\n", strlen("rec#2\n"),
	aio[0].aio_nbytes)
	aio[0].aio_lio_opcode = aio[1].aio_lio_opcode = LIO_WRITE;
	ret = lio_listio(LIO_WAIT, aio_list, 2, 0);
	if (ret) return ret;

	return 0;
}

Execution Result

>aio_sample6.exe
>type dat
rec#1
rec#2

The aio_lio_opcode refers to the field of each aiocb structure that specifies the operation to be performed. The supported operations are LIO_READ (do a read operation), LIO_WRITE (do a write operation), and LIO_NOP (do no operation); these symbols are defined in <aio.h>.

See Also