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;
}
>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>.