インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

aio_suspend 関数の例

次に、aio_suspend() 関数を使用して待機操作を実行する例を示します。

int aio_ex_2(HANDLE fd)
{ 
	static struct aiocb   aio[2]; 
	static struct aiocb  *aio_list[2] = {&aio[0], &aio[1]}; 
	int i, ret; 
 
/* データの初期化 */ 
IC_AIO_DATA_INIT(aio[0], fd, "rec#1\n", strlen("rec#1\n"), 0)
IC_AIO_DATA_INIT(aio[1], fd, "rec#2\n", strlen("rec#2\n"), aio[0].aio_nbytes)

/* 非同期書き込み */
if (aio_write(&aio[0]) == -1) return errno;
if (aio_write(&aio[1]) == -1) return errno;

/* 複雑な計算を実行 */ 
printf("do_compute(1000, 1.123)=%f", do_compute(1000, 1.123));

/* sleep() を使用して待機 */ 
ret = aio_suspend(aio_list, 2, 0); 
if (ret == -1) return errno; 

return 0; 
}/* aio_ex_2 */

実行結果:

-bash-3.00$ ./a.out
-bash-3.00$ cat dat
rec#1
rec#2

リマーク:

  1. この例では、IC_AIO_DATA_INIT は次のように定義されています。
    #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;}
  2. ファイル記述子 fd は、次のように取得できます。
    HANDLE fd = CreateFile("dat",
      GENERIC_READ | GENERIC_WRITE,
      FILE_SHARE_READ,
      NULL,
      OPEN_ALWAYS,
      FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/,
      NULL);

関連情報