aio_suspend - 非同期 I/O
操作またはタイムアウトを待つ
#include <aio.h>
int aio_suspend(const struct aiocb * const aiocb_list[],
int nitems, const struct timespec *timeout);
-lrt でリンクする。
aio_suspend()
関数は、以下のいずれかが発生するまで
呼び出したスレッドの実行を停止
(suspend) する。
- *
-
aiocb_list
リスト内の非同期 I/O
リクエストのうち、少なくとも一つが完了した。
- *
- シグナルが配送された。
- *
-
timeout が NULL
でない場合に、指定した時間が経過した
( timespec 構造体の詳細は
nanosleep(2) を参照)。
nitems 引数は
aiocb_list
の要素数を指定する。
aiocb_list
が指すリストの各要素は、NULL
(これは無視される)
か、
aio_read(3),
aio_write(3),
lio_listio(3)
を使って I/O
が開始された
制御ブロックへのポインターでなければならない。
(
aiocb 構造体の説明は
aio(7) を参照)
CLOCK_MONOTONIC
がサポートされる場合、
このクロックを使ってタイムアウトの
間隔が計測される (
clock_gettime(3) を参照)。
aiocb_list で指定された I/O
リクエストの 1
つが完了した後に
この関数が返った場合は、0
が返される。
それ以外の場合は、 -1
が返り、
errno
にエラーを示す値に設定される。
- EAGAIN
- 指示された操作のどれも完了しないうちに、呼び出しがタイムアウトした。
- EINTR
- この呼び出しがシグナルによって終了させられた
(このシグナルは、完了を待っていた
操作のいずれかの完了シグナルの可能性もある)。
signal(7) 参照。
- ENOSYS
-
aio_suspend()
は実装されていない。
The
aio_suspend() 関数は glibc 2.1
以降で利用できる。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
aio_suspend() |
Thread safety |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
時間間隔が 0
であることを指定する
NULL ではない
timeout
を使って、ポーリングを行うこともできる。
aiocb_list
リストで指定した非同期
I/O 操作のうち、
aio_suspend()
を呼び出した時点ですでに完了したものがある場合、
aio_suspend() はすぐに返る。
aio_suspend()
が成功で返った後でどの
I/O
操作が完了したかを特定するには、
aio_error(3) を使って
aiocb_list
が指す
aiocb
構造体のリストを
スキャンする。
aio_suspend() の glibc 実装は、 POSIX.1
の要件を満たしていないが、
async-signal-safe
(非同期シグナルで安全)
ではない。
aio_cancel(3),
aio_error(3),
aio_fsync(3),
aio_read(3),
aio_return(3),
aio_write(3),
lio_listio(3),
aio(7),
time(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。