aio_cancel -
完了していない非同期
I/O
リクエストをキャンセルする
#include <aio.h>
int aio_cancel(int fd, struct aiocb *aiocbp);
-lrt でリンクする。
aio_cancel()
関数は、ファイルディスクリプター
fd
についての完了して
いない非同期 I/O
リクエストをキャンセルしようとする。
aiocbp が NULL
の場合、そのような全てのリクエストがキャンセルされる。
aiocbp が NULL でない場合、
aiocbp
で指された制御ブロックで記述されたリクエ
ストのみがキャンセルされる。(
aiocb 構造体の説明は
aio(7) を参照)
キャンセルされたリクエストに対して、通常の非同期通知が起こる
(
aio(7) と
sigevent(7) を参照)。
リクエストの返り値 (
aio_return(3)) は -1
に設定され、
リクエストのエラー状態
(
aio_error(3)) は
ECANCELED
に設定される。
キャンセルできないリクエストの制御ブロックは変更されない。
リクエストがキャンセルできない場合には、
aio_cancel() は通常の I/O
操作の実行後と同じように終了する。
(この場合、
aio_error(3)
はステータス
EINPROGRESSS
を返す)。
aiocbp が NULL でなく、かつ
fd
が非同期操作が開始されたファイルディスクリプターと異なる場合、
生じる結果は不定である。
どの操作をキャンセルできるかは、実装定義である。
aio_cancel()
関数は以下のいずれかの値を返す。
- AIO_CANCELED
- 全てのリクエストが正常にキャンセルされた。
- AIO_NOTCANCELED
- 指定されたリクエストのうち少なくとも一つが、実行中のため
キャンセルできなかった。この場合には、
aio_error(3) を使って
個々のリクエストの状態を確認できる。
- AIO_ALLDONE
- 呼び出しの前に全てのリクエストがすでに完了していた。
- -1
- エラーが発生した。
errno
を確認することでエラーの原因を知ることができる。
- EBADF
-
fd
が有効なファイルディスクリプターでない。
- ENOSYS
-
aio_cancel()
は実装されていない。
aio_cancel() 関数は glibc 2.1
以降で利用できる。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
aio_cancel() |
Thread safety |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
aio(7) を参照。
aio_error(3),
aio_fsync(3),
aio_read(3),
aio_return(3),
aio_suspend(3),
aio_write(3),
lio_listio(3),
aio(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。