199 lines
5.5 KiB
Groff
199 lines
5.5 KiB
Groff
.\" 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.4.2.4 2001/07/22 12:06:50 dd Exp %
|
|
.\"
|
|
.\" $FreeBSD: doc/ja_JP.eucJP/man/man2/aio_write.2,v 1.3 2001/05/14 01:08:20 horikawa Exp $
|
|
.Dd June 2, 1999
|
|
.Dt AIO_WRITE 2
|
|
.Os
|
|
.Sh 名称
|
|
.Nm aio_write
|
|
.Nd ファイルへの非同期書込み (REALTIME)
|
|
.Sh ライブラリ
|
|
.Lb libc
|
|
.Sh 書式
|
|
.Fd #include <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_read
|
|
呼び出しの前に 0 にする必要があります。
|
|
.Pp
|
|
要求が待ち行列に入れられた後、要求が完了するまでは
|
|
非同期入出力制御ブロック構造体、
|
|
またはバッファの内容を修正することは許されません。
|
|
.Pp
|
|
.Fa iocb->aio_offset
|
|
内のファイルオフセットが
|
|
.Fa iocb->aio_fildes
|
|
用のオフセット最大を越える場合は入出力は行われません。
|
|
.Sh 戻り値
|
|
.\".Rv -std aio_write
|
|
.Fn aio_write
|
|
関数は成功すると値 0 を返します。それ以外の場合は値 -1 が
|
|
返され、エラーを示すグローバル変数
|
|
.Ar errno
|
|
が設定されます。
|
|
.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_erro
|
|
が呼び出される必要があります。
|
|
.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 規格
|
|
.Fn aio_write
|
|
は
|
|
.St -p1003.2
|
|
標準に準拠しています。
|
|
.Sh 歴史
|
|
.Nm
|
|
関数は
|
|
.Fx 3.0
|
|
ではじめて登場しました。
|
|
.Sh 作者
|
|
このマニュアルページは
|
|
.An Wes Peters Aq wes@softweyr.com
|
|
が作成しました。
|
|
.Sh バグ
|
|
非同期入出力操作はこのバージョンではキャンセルできません。
|
|
.Fa iocb->_aiocb_private
|
|
内の誤った情報はカーネルを混乱させる可能性があります。
|