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

lio_listio 関数の例

次に、lio_listio() 関数の使用例を示します。

int aio_ex_5(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)
 aio[0].aio_lio_opcode = aio[1].aio_lio_opcode = LIO_WRITE;
 ret = lio_listio(LIO_WAIT, aio_list, 2, 0);
 if (ret) return ret;
 
 return 0;
}/* aio_ex_5 */

実行結果:

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

リマーク:

  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);
  3. aio_lio_opcode は、実行する操作が指定されている各 aiocb 構造体のフィールドを参照します。サポートされている操作は、LIO_READ ('read' 操作の実行)、LIO_WRITE ('write' 操作の実行)、および LIO_NOP (nop 操作) です。これらのシンボルは、<aio.h> で定義されています。

関連情報