マルチスレッドのプログラミング

非同期入出力操作

#include <aio.h>

int aio_read(struct aiocb *aiocbp);

int aio_write(struct aiocb *aiocbp);

int aio_error(const struct aiocb *aiocbp);

ssize_t aio_return(struct aiocb *aiocbp);

int aio_suspend(struct aiocb *list[], int nent,
    const struct timespec *timeout);

int aio_waitn(struct aiocb *list[], uint_t nent, uint_t *nwait,
    const struct timespec *timeout);

int aio_cancel(int fildes, struct aiocb *aiocbp);

aio_read(3RT)aio_write(3RT) は、概念において pread(2)pwrite(2) に似ています。ただし、入出力操作のパラメータが、aio_read() または aio_write() に渡される非同期入出力制御ブロック (aiocbp) に格納される点が異なります。

    aiocbp->aio_fildes;    /* file descriptor */
    aiocbp->aio_buf;       /* buffer */
    aiocbp->aio_nbytes;    /* I/O request size */
    aiocbp->aio_offset;    /* file offset */

さらに、必要に応じて、「struct sigevent」のメンバーで非同期通知タイプ (一般には、待ち行列に入れられたシグナル) を指定することができます。

    aiocbp->aio_sigevent;  /* notification type */

aio_read() または aio_write() を呼び出すと、入出力操作が開始されます (または、入出力要求が待ち行列に入れられます)。この呼び出しは、ブロックされずに復帰します。

非同期操作の進行中のエラー状態や復帰状態を判定するために、aiocbp の値を aio_error(3RT) および aio_return(3RT) の引数として使用できます。