kazmax - Linux で自宅サーバー

aio_write - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 注意
  7. 準拠
  8. 関連項目

名前

aio_write - 非同期で書き込む

書式


"#include <aio.h>"
int aio_write(struct aiocb * aiocbp );

説明

aio_write ()関数は非同期の "n = write(fd, buf, count)" をリクエストする。 ここで fd, buf, count は、それぞれ aiocbp->aio_fildes , aiocbp->aio_buf , aiocbp->aio_nbytes で与えられる。 返り値 (return status) n は、完了時に   aio_return (3) を使って取得できる。

O_APPEND が設定されない場合、カレントのファイル位置に関係なく、 データは絶対ファイルオフセット aiocbp->aio_offset を開始点として書き込まれる。 O_APPEND が設定されている場合、データはファイルの終端に書き込まれる。 このリクエストの後の、カレントのファイル位置は規定されていない。

「非同期」とは「リクエストがキューに入れられたら、この呼び出しはすぐに返る」 ということである。 呼び出しから戻った時に、書き込みは完了しているかも知れないし、 完了していないかも知れない。   aio_error (3) を使うことで完了したかをテストできる。

_POSIX_PRIORITIZED_IO が定義されていて、 かつファイルがこれをサポートしている場合、 非同期操作は呼び出したプロセスの優先度から aiocbp->aio_reqprio を引いた優先度で登録 (submit) される。

フィールド aiocbp->aio_lio_opcode は無視される。

最大オフセットを超えた通常のファイルには、何もデータが書き込まれない。

返り値

成功した場合、0 が返される。 エラーの場合、リクエストはキューに入れられず、 -1 が返されて、 errno が適切に設定される。 エラーは最初に検知された後で、 (状態 -1 を返す)   aio_return (3) と ( errno で取得できる EBADF のようなエラー状態を返す)   aio_error (3) で報告されるだろう。

エラー

EAGAIN
リソースが足りない。
EBADF
aio_fildes は書き込みのためにオープンされた有効なファイルディスクリプタでない。
EFBIG
ファイルは通常のファイルであり、少なくとも 1 バイトを書き込もうとしている。 しかし開始位置が、このファイルの最大オフセットと同じかそれを超えている。
EINVAL
aio_offset , aio_reqprio , aio_nbytes のうち 1 つ以上が無効である。
ENOSYS
この関数がサポートされていない。

注意

使用する前に制御ブロックを 0 にしておくのは、よい考えである。 この制御ブロックは、読み込み操作が進行している間は変更すべきでない。 読み込まれるバッファ領域は 操作の最中にアクセスすべきではない。 さもないと起こる結果が不定になる。 これに含まれるメモリ領域は、有効なままにしなければならない。

準拠

POSIX.1-2001

関連項目