インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
次に、lio_listio() 関数の使用例を示します。
int aio_ex_5(HANDLE fd) { static struct aiocb aio[2]; static struct aiocb *aio_list[2] = {&aio[0], &aio[1]}; int i, ret; /* ** データの初期化と同期書き込み */ 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_ex_5 */
実行結果:
-bash-3.00$ ./a.out -bash-3.00$ cat dat rec#1 rec#2 -bash-3.00$
リマーク:
#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;}
HANDLE fd = CreateFile("dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/, NULL);