インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
次に、aio_error() 関数と aio_return() 関数の使用例を示します。
int aio_ex_3(HANDLE fd) { static struct aiocb aio; static struct aiocb *aio_list[] = {&aio}; int ret; char *dat = "Hello from Ex-3\n"; /* データの初期化と同期書き込み */ IC_AIO_DATA_INIT(aio, fd, dat, strlen(dat), 0); if (aio_write(& aio) == -1) return errno; ret = aio_error(&aio); if ( ret == EINPROGRESS ) { fprintf(stderr, "ERRNO=%d STR=%s\n", ret, strerror(ret)); ret = aio_suspend(aio_list, 1, NULL); if (ret == -1) return errno;} else if (ret) return ret; ret = aio_error(&aio); if (ret) return ret; ret = aio_return(&aio); printf("ret=%d\n", ret); return 0; }/* aio_ex_3 */
実行結果:
-bash-3.00$ ./a.out ERRNO=115 STR=Operation now in progress ret=16 -bash-3.00$ cat dat Hello from Ex-3
リマーク:
#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);