インテル® C++ コンパイラー 17.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};
/* データの初期化 */
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);
/* 非同期の書き込みと計算を同時に行う */
aio_write(&my_aio);
do_compute(arr, 123456);
/* 書き込みを 1 秒間停止 */
res = aio_suspend(my_aio_list, 1, &my_t);
if ( res ) {
/* 操作が完了する前にタイムアウトにより呼び出しが終了 */
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 を確認できます。