AIO_WRITE

Section: Linux Programmer's Manual (3)
Updated: 2017-09-15
Index JM Home Page roff page
 

名前

aio_write - 非同期で書き込む  

書式

#include <aio.h>

int aio_write(struct aiocb *aiocbp);

-lrt でリンクする。  

説明

aio_write() 関数は、aiocbp が指すバッファーに記載された I/O リクエストをキューに入れる。この関数は write(2) の非同期版である。 呼び出し


    write(fd, buf, count)

の各引数は aiocb が指す構造体の aio_fildes, aio_buf, aio_nbytes に (この順序で) 対応する (aiocb 構造体の説明は aio(7) を参照)。

O_APPEND が設定されない場合、ファイルオフセットに関係なく、 データは絶対位置 aiocbp->aio_offset を開始点として書き込まれる。 O_APPEND が設定されている場合、データはファイルの末尾に、 aio_write() の呼び出しが行われたのと同じ順序で書き込まれる。この呼び出しの後のファイルオフセットは規定されていない。

「非同期」とは「リクエストがキューに入れられたら、この呼び出しはすぐに返る」 ということである。 呼び出しから戻った時に、書き込みは完了しているかも知れないし、 完了していないかも知れない。 aio_error(3) を使うことで完了したかをテストできる。 完了した I/O 操作の返り値は aio_return(3) で取得できる。 aiocbp->aio_sigevent を適切に設定することで、 I/O 完了の非同期通知は受けることもできる。詳細は sigevent(7) を参照。

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

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

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

返り値

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

エラー

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

バージョン

The aio_write() 関数は glibc 2.1 以降で利用できる。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース属性
aio_write() Thread safetyMT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008.  

注意

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

同じ aiocb 構造体を指定して同時に複数の I/O 操作を行った場合、 どのような結果になるかは不定である。  

関連項目

aio_cancel(3), aio_error(3), aio_fsync(3), aio_read(3), aio_return(3), aio_suspend(3), lio_listio(3), aio(7)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。


 

Index

名前
書式
説明
返り値
エラー
バージョン
属性
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 03:33:26 GMT, December 05, 2022