インテル® C++ コンパイラー 14.0 ユーザー・リファレンス・ガイド
このトピックは、Windows* にのみ適用されます。
errno マクロを使用して、aio_read()、aio_write()、aio_fsync()、lio_listio() などの非同期要求関数や aio_cancel()、aio_error()、aio_return()、aio_suspend() などの非同期制御関数を実行中に発生したエラーを取得できます。
次に、errno の使用例を示します。
#include <stdio.h>
#include <stdlib.h>
#include <aio.h>
struct aiocb my_aio;
struct aiocb *my_aio_list[1] = {&my_aio};int main()
{int res;
double arr[123456];
timespec_t my_t = {1, 0};/* Data initialization */
my_aio.aio_fildes = CreateFile("dat",GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
my_aio.aio_buf = (volatile char *)arr;
my_aio.aio_nbytes = sizeof(arr);
/* Do asynchronous writing with computation overlapping */
aio_write(&my_aio);
do_compute(arr, 123456);
/* Suspend the asynchronous writing for 1 sec */
res = aio_suspend(my_aio_list, 1, &my_t);
if ( res ) {/* The call was ended by timeout, before the indicated operations had completed. */
if ( errno == EAGAIN ) {res = aio_suspend(my_aio_list, 1, 0);
if ( res ) { printf("aio_suspend returned non-0\n"); return errno;}}
else
if ( res ) { printf("aio_suspend returned neither 0 nor EAGAIN\n");return errno;
}
}
CloseHandle(my_aio.aio_fildes);
printf("\nPass\n");return 0;
}
この例では、aio_write() を使用して非同期の書き込み操作を実行し、同時に do_compute() 関数でいくつかの計算を行っています。 保留状態の書き込み操作は、aio_suspend() を使用して 1 秒間停止されています。
非同期の書き込み操作の実行に成功すると、0 が返されます。操作が完了する前に呼び出しがタイムアウトすると、EAGAIN やほかのエラー値が返されます。
errno マクロを使用して、EAGAIN を確認できます。