インテル® C++ コンパイラー 14.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";
/* Data initialization and asynchronously writing */
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 */
実行結果:
#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);