インテル® C++ コンパイラー 18.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 を確認できます。