aio_write(2) FreeBSD 一般コマンドマニュアル

aio_write

前のページ 上に戻る 次のページ

aio_write




書式

     #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_read() 呼び出しの前に 0 にする必要が
     あります。

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

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


戻り値

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


エラー

                        ません。

     [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_write() は IEEE Std 1003.2 (``POSIX.2'') 標準に準拠しています。


歴史

     aio_write 関数は FreeBSD 3.0 ではじめて登場しました。


作者

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


バグ

     非同期入出力操作はこのバージョンではキャンセルできません。
     iocb->_aiocb_private 内の誤った情報はカーネルを混乱させる可能性がありま
     す。

FreeBSD 4.4                      June 2, 1999                      FreeBSD 4.4

ABELNET VPSサービス