スポンサーリンク

AIO_WRITE(2) FreeBSD システムコールマニュアル AIO_WRITE(2)

名称

aio_write − ファイルへの非同期書込み (REALTIME)

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <aio.h>

int

aio_write(struct aiocb *iocb);

解説

aio_write() システムコールによって、呼び出し元プロセスは iocb->aio_buf が 指すバッファから記述子 iocb->aio_fildesiocb->aio_nbytes を書き込めま す。書込み要求が記述子への待ち行列に入れられてしまうと、ただちに呼び出し は戻ります。呼び出しが戻った時点で書込みは完了している可能性も完了してい ない可能性もあります。無効な引数のためなどにより要求を待ち行列に入れられ ない場合は、呼び出しは要求を待ち行列に入れずに戻ります。

iocb->aio_fildes 用に O_APPEND が設定されている場合、 aio_write() 操作は 呼び出しが行われたのと同じ順序でファイルの末尾に追加されます。 O_APPEND がファイル記述子用に設定されていない場合、書込み操作はファイルの先頭に iocb->aio_offset を加えた絶対位置で行われます。

_POSIX_PRIORITIZED_IO が定義されており、かつ記述子がそれをサポートしてい る場合、待ち行列に入れられた操作は呼び出しプロセスの優先順位から iocb->aio_reqprio を減算したのに等しい優先順位にされます。

iocb ポインタは待ち行列に入れられた操作の戻り値、またはエラー状態を判定す るために、 aio_return() および aio_error() への引数として使用できます。

要求が正常に待ち行列に入れられると、コンテキストとして要求の間に iocb->aio_offset の値が修正できるので、この値は要求が待ち行列に入れられた 後に参照されてはなりません。

制限

iocb が指す非同期入出力制御ブロック構造体、およびその構造体の iocb->aio_buf メンバが参照するバッファは、操作が完了するまで有効なままで いる必要があります。このため、これらのオブジェクトについて自動 (スタック) 変数の使用は推奨されません。

正しくないコンテキスト情報がカーネルに引き渡されるのを回避するために、非 同期入出力制御バッファ iocb は、 aio_write() システムコールの前に 0 にす る必要があります。

要求が待ち行列に入れられた後、要求が完了するまでは非同期入出力制御ブロッ ク構造体、またはバッファの内容を修正することは許されません。

iocb->aio_offset 内のファイルオフセットが iocb->aio_fildes 用のオフセット 最大を越える場合は入出力は行われません。

戻り値

関数 aio_write() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。

エラー

aio_write() システムコールは次の場合に処理を失敗します:

       [EAGAIN]

システムリソースの制限のために要求は待ち行列に入れられ ませんでした。

[ENOSYS]
aio_write
() システムコールはサポートされていません。

次の状態は aio_write() システムコールが行われたときに同期的に検出でき、そ の後いつでも非同期的に検出できます。これらが呼び出し時に検出された場合に aio_write() は -1 を返し errno を適切に設定します。そうでない場合は aio_return() システムコールが戻り値 -1 で呼び出される必要があり、 errno で返されている実際の値を判定するために aio_error() が呼び出される必要があ ります。

[EBADF]
iocb->aio_fildes
引数が無効であるか、書込みにはオープ ンされていません。

[EINVAL]
オフセット iocb->aio_offset が有効でない、 iocb->aio_reqprio によって指定される優先順位が有効な優 先順位でない、または iocb->aio_nbytes によって指定され るバイト数が有効ではありません。

要求が正常に待ち行列に入れられたものの、後でキャンセルされるかエラーが発 生した場合、 aio_return() システムコールによって返された値は write(2) シ ステムコールごとのものであり、 aio_error() システムコールによって返された 値は write(2) システムコールから返されたエラーの 1 つであるか、または次の 1 つです。

[EBADF]
iocb->aio_fildes
引数は書込みについては無効です。

[ECANCELED]
要求は aio_cancel() の呼び出しによって明示的にキャンセ ルされました。

[EINVAL]
オフセット iocb->aio_offset は無効です。

関連項目

aio_cancel(2), aio_error(2), aio_return(2), aio_suspend(2), aio_waitcomplete(2), aio(4)

規格

aio_write() システムコールは IEEE Std 1003.1 (‘‘POSIX.1’’) 標準に適合して います。

歴史

aio_write() システムコールは FreeBSD 3.0 ではじめて登場しました。

作者

このマニュアルページは Wes Peters ⟨wes@softweyr.com⟩ が作成しました。

バグ

iocb->_aiocb_private 内の誤った情報はカーネルを混乱させる可能性がありま す。

FreeBSD 10.0 June 2, 1999 FreeBSD 10.0

スポンサーリンク