.\" Copyright (c) 1999 Softweyr LLC. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY Softweyr LLC AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL Softweyr LLC OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libc/sys/aio_write.2,v 1.18 2004/07/03 22:30:09 ru Exp % .\" .\" $FreeBSD$ .Dd June 2, 1999 .Dt AIO_WRITE 2 .Os .Sh 名称 .Nm aio_write .Nd ファイルへの非同期書込み (REALTIME) .Sh ライブラリ .Lb libc .Sh 書式 .In aio.h .Ft int .Fn aio_write "struct aiocb *iocb" .Sh 解説 .Fn aio_write システムコールによって、呼び出し元プロセスは .Fa iocb->aio_buf が指すバッファから記述子 .Fa iocb->aio_fildes に .Fa iocb->aio_nbytes を書き込めます。 書込み要求が記述子への待ち行列に入れられてしまうと、 ただちに呼び出しは戻ります。 呼び出しが戻った時点で書込みは完了している可能性も完了していない 可能性もあります。 無効な引数のためなどにより要求を待ち行列に入れられない場合は、 呼び出しは要求を待ち行列に入れずに戻ります。 .Pp .Fa iocb->aio_fildes 用に .Dv O_APPEND が設定されている場合、 .Fn aio_write 操作は呼び出しが行われたのと同じ順序で ファイルの末尾に追加されます。 .Dv O_APPEND がファイル記述子用に設定されていない場合、書込み操作はファイルの先頭に .Fa iocb->aio_offset を加えた絶対位置で行われます。 .Pp .Dv _POSIX_PRIORITIZED_IO が定義されており、かつ記述子がそれをサポートしている場合、 待ち行列に入れられた操作は呼び出しプロセスの優先順位から .Fa iocb->aio_reqprio を減算したのに等しい優先順位にされます。 .Pp .Fa iocb ポインタは待ち行列に入れられた操作の戻り値、またはエラー状態を 判定するために、 .Fn aio_return および .Fn aio_error への引数として使用できます。 .Pp 要求が正常に待ち行列に入れられると、コンテキストとして要求の間に .Fa iocb->aio_offset の値が修正できるので、 この値は要求が待ち行列に入れられた後に参照されてはなりません。 .Sh 制限 .Fa iocb が指す非同期入出力制御ブロック構造体、およびその構造体の .Fa iocb->aio_buf メンバが参照するバッファは、 操作が完了するまで有効なままでいる必要があります。 このため、これらのオブジェクトについて自動 (スタック) 変数 の使用は推奨されません。 .Pp 正しくないコンテキスト情報がカーネルに引き渡されるのを回避するために、 非同期入出力制御バッファ .Fa iocb は、 .Fn aio_write システムコールの前に 0 にする必要があります。 .Pp 要求が待ち行列に入れられた後、要求が完了するまでは 非同期入出力制御ブロック構造体、 またはバッファの内容を修正することは許されません。 .Pp .Fa iocb->aio_offset 内のファイルオフセットが .Fa iocb->aio_fildes 用のオフセット最大を越える場合は入出力は行われません。 .Sh 戻り値 .Rv -std aio_write .Sh エラー .Fn aio_write システムコールは次の場合に処理を失敗します: .Bl -tag -width Er .It Bq Er EAGAIN システムリソースの制限のために要求は待ち行列に入れられませんでした。 .It Bq Er ENOSYS .Fn aio_write システムコールはサポートされていません。 .El .Pp 次の状態は .Fn aio_write システムコールが行われたときに同期的に検出でき、 その後いつでも非同期的に検出できます。 これらが呼び出し時に検出された場合に .Fn aio_write は -1 を返し .Va errno を適切に設定します。 そうでない場合は .Fn aio_return システムコールが戻り値 -1 で呼び出される必要があり、 .Va errno で返されている実際の値を判定するために .Fn aio_error が呼び出される必要があります。 .Pp .Bl -tag -width Er .It Bq Er EBADF .Fa iocb->aio_fildes 引数が無効であるか、書込みにはオープンされていません。 .It Bq Er EINVAL オフセット .Fa iocb->aio_offset が有効でない、 .Fa iocb->aio_reqprio によって指定される優先順位が 有効な優先順位でない、または .Fa iocb->aio_nbytes によって指定されるバイト数が有効ではありません。 .El .Pp 要求が正常に待ち行列に入れられたものの、 後でキャンセルされるかエラーが発生した場合、 .Fn aio_return システムコールによって返された値は .Xr write 2 システムコールごとのものであり、 .Fn aio_error システムコールによって返された値は .Xr write 2 システムコールから返されたエラーの 1 つであるか、または次の 1 つです。 .Bl -tag -width Er .It Bq Er EBADF .Fa iocb->aio_fildes 引数は書込みについては無効です。 .It Bq Er ECANCELED 要求は .Fn aio_cancel の呼び出しによって明示的にキャンセルされました。 .It Bq Er EINVAL オフセット .Fa iocb->aio_offset は無効です。 .El .Sh 関連項目 .Xr aio_cancel 2 , .Xr aio_error 2 , .Xr aio_return 2 , .Xr aio_suspend 2 , .Xr aio_waitcomplete 2 , .Xr aio 4 .Sh 規格 .Fn aio_write システムコールは .St -p1003.1 標準に適合しています。 .Sh 歴史 .Fn aio_write システムコールは .Fx 3.0 ではじめて登場しました。 .Sh 作者 このマニュアルページは .An Wes Peters Aq wes@softweyr.com が作成しました。 .Sh バグ .Fa iocb->_aiocb_private 内の誤った情報はカーネルを混乱させる可能性があります。