aio_read または aio_read64 サブルーチン
aio_read または aio_read64 サブルーチンには、 POSIX AIO aio_read サブルーチン (IEEE std 1003.1-2001で定義)、および レガシー AIO aio_read サブルーチンの情報が含まれています。
POSIX AIO aio_read サブルーチン
目的
ファイルを非同期で読み取ります。
ライブラリー
標準 C ライブラリー (libc.a)
構文
#include <aio.h>
int aio_read (aiocbp)
struct aiocb *aiocbp;
説明
aio_read サブルーチンは、 aio_fildes に関連したファイルから、 aio_bufが指すバッファーに aio_nbytes を読み取ります。 このサブルーチンは、読み取り要求が開始されるか、ファイルまたは装置のキューに入れられると (データを即時に送信できない場合でも) 戻ります。
aiocbp 値は、処理中の非同期操作のエラー状況と戻り状況をそれぞれ判別するために、 aio_error および aio_return サブルーチンに対する引数として使用することができます。 キューイング中にエラー条件が検出されると、関数呼び出しは、要求を開始またはキューに入れずに戻ります。 要求された操作は、 aio_offset によって指定されたファイル内の絶対位置で行われます。これは、 lseek サブルーチンが aio_offset に等しいオフセットと SEEK_SET に等しい値を持つ操作の直前に呼び出されたかのようになります。 非同期入出力操作をエンキューするための呼び出しが成功した後、ファイルのファイル・オフセットの値は指定されません。
aio_lio_opcode フィールドは、 aio_read サブルーチンによって無視されます。
このファイルに対して優先順位付けされた入出力がサポートされている場合、非同期操作は、プロセスのスケジューリング優先順位から aiocbp->aio_reqprioを引いた優先順位で実行依頼されます。
aiocbp パラメーターは、 aiocb 構造体を指します。 aio_buf が指すバッファーまたは aiocbp が指す制御ブロックが、非同期入出力の完了前に正しくないアドレスになる場合、動作は未定義です。
同じ aiocbp を使用して非同期操作を同時に行うと、未定義の結果が生成されます。
aio_fildesに関連したファイルで同期化された入出力が使用可能になっている場合、このサブルーチンの動作は、同期化された入出力データ保全性の完了および同期化された入出力ファイル保全性の完了の定義に従います。
非同期入出力が未処理の間にプロセス・メモリー・スペースを変更するシステム・アクションの場合、そのアクションの結果は未定義です。
通常のファイルの場合には, オープン・ファイル記述に設定されたオフセット最大値を超えるデータ転送は行われません。
aio_read サブルーチンまたは aio_read64 サブルーチンを、 shm_open サブルーチンの呼び出しから取得したファイル記述子と一緒に使用すると、 EINVALで失敗します。
パラメーター
| 項目 | 説明 |
|---|---|
| Aaiocbp (aiocbp) | 入出力操作に関連した aiocb 構造体を指します。 |
aiocb 構造体
int aio_fildes
off_t aio_offset
char *aio_buf
size_t aio_nbytes
int aio_reqprio
struct sigevent aio_sigevent
int aio_lio_opcode実行環境
aio_read および aio_read64 サブルーチンは、 プロセス環境 からのみ呼び出すことができます。
戻り値
入出力操作が正常にキューに入れられると、 aio_read サブルーチンは 0 を呼び出しプロセスに戻します。 そうでない場合は-1を返し、エラーを示すグローバル変数errnoをセットする。
エラー・コード
| 項目 | 説明 |
|---|---|
| EAGAIN | 要求した非同期入出力操作は、システム・リソースの制限が原因でキューに入れられませんでした。 |
以下の各条件は、 aio_read サブルーチンの呼び出し時に同期的に、または非同期的に検出されます。 以下の条件のいずれかが同期的に検出された場合、aio_readサブルーチンは-1を返し、errnoグローバル変数に対応する値を設定する。 以下の条件のいずれかが非同期的に検出された場合は、非同期操作の 戻り状況は -1 に設定され、非同期操作のエラー状況は、対応する値に設定 されます。
| 項目 | 説明 |
|---|---|
| EBADF | aio_fildes パラメーターは、読み取り用にオープンされた有効なファイル記述子ではありません。 |
| EINVAL | aio_offset によって暗黙指定されたファイル・オフセット値が無効であるか、 aio_reqprio が無効な値であるか、 aio_nbytes が無効な値です。 aio_read または aio_read64 サブルーチンが、 shm_open サブルーチンへの呼び出しから取得されたファイル・ディスクリプターで使用されました。 |
| 項目 | 説明 |
|---|---|
| EBADF | aio_fildes 引数は、読み取り用にオープンされた有効なファイル記述子ではありません。 |
| ECANCELED | 明示的な aio_cancel 要求のために、入出力が完了する前に、要求された入出力が取り消されました。 |
| EINVAL | aio_offset によって暗黙指定されたファイル・オフセット値が無効です。 |
| 項目 | 説明 |
|---|---|
| EOVERFLOW | ファイルが正規のファイルで、 aio_nbytes が 0 より大きく、 aio_offset 内の開始オフセットがファイルの終わりより前で、 aio_fildesに関連したオープン・ファイル記述内のオフセット最大値以上である。 |
レガシー AIO aio_read サブルーチン
目的: ファイルから非同期に読み取ります。
ライブラリー (レガシー AIO aio_read サブルーチン)
標準 C ライブラリー (libc.a)
構文 (レガシー AIO aio_read サブルーチン)
#include <aio.h>
説明 (レガシー AIO aio_read サブルーチン)
aio_read サブルーチンは、ファイルから非同期的に読み取ります。 具体的には、 aio_read サブルーチンは、 FileDescriptor パラメーターに関連したファイルからバッファーに読み取ります。
aio_read64 サブルーチンは、 aiocb64 参照パラメーターを取る aio_read サブルーチンの EXEC に似ています。 これにより、 aio_read64 サブルーチンは、 OFF_MAX (2 ギガバイト-1) を超えるオフセットを指定することができます。
ラージ・ファイル対応プログラミング環境では、 aio_read は aio_read64 に再定義されます。
aio_read サブルーチンまたは aio_read64 サブルーチンを、 shm_open サブルーチンの呼び出しから取得したファイル記述子と一緒に使用すると、 EINVALで失敗します。
読み取りの詳細は、 aiocbp パラメーターによって指し示される aiocb 構造体の情報によって提供されます。 この情報には、以下のフィールドが含まれます。
| 項目 | 説明 |
|---|---|
| aio_buf | 使用するバッファーを示します。 |
| aio_nbytes | 読み取るバイト数を示します。 |
読み取り要求がキューに入れられると、 aio_read サブルーチンは、以下によって指定されたファイル・ポインターを更新します。aio_whenceおよびaio_offsetaiocb 構造体のフィールドは、要求された入出力が既に完了しているかのようになります。 その後、呼び出し側プログラムに戻ります。 このaio_whenceおよびaio_offsetフィールドは、 lseek サブルーチンの whence および offset パラメーターと同じ意味を持ちます。 シークできないファイル・オブジェクトについては、サブルーチンはそれらを無視します。
呼び出し中にエラーが発生した場合、読み取り要求はキューに入れられません。 要求の状況を判別するには、 aio_error サブルーチンを使用します。
入出力操作の完了時に呼び出しプロセスが SIGIO シグナルを受け取るようにするには、AIO_SIGNAL ビットをaio_flagaiocb 構造体のフィールド。
#define _AIO_AIX_SOURCE
#include <sys/aio.h>または、コンパイル時にコマンド行で次のように入力します。->xlc ... -D_AIO_AIX_SOURCE ... legacy_aio_program.c この時点では優先順位付けされた入出力はサポートされていないため、構造の aio_reqprio フィールドは現在使用されていません。
パラメーター (レガシー AIO aio_read サブルーチン)
| 項目 | 説明 |
|---|---|
| FileDescriptor | オープンの呼び出しから戻されたものとして読み取られるオブジェクトを識別します。 |
| Aaiocbp (aiocbp) | 入出力操作に関連した非同期入出力制御ブロック構造を指します。 |
aiocb 構造体
struct aiocb
{
int aio_whence;
off_t aio_offset;
char *aio_buf;
ssize_t aio_return;
int aio_errno;
size_t aio_nbytes;
union {
int reqprio;
struct {
int version:8;
int priority:8;
int cache_hint:16;
} ext;
} aio_u1;
int aio_flag;
int aio_iocpfd;
aio_handle_t aio_handle;
}
#define aio_reqprio aio_u1.reqprio
#define aio_version aio_u1.ext.version
#define aio_priority aio_u1.ext.priority
#define aio_cache_hint aio_u1.ext.cache_hint実行環境 (レガシー AIO aio_read サブルーチン)
aio_read および aio_read64 サブルーチンは、プロセス環境からのみ呼び出すことができます。
戻り値 (レガシー AIO aio_read サブルーチン)
読み取り要求が正常にキューに入れられると、 aio_read サブルーチンは値 0 を戻します。 そうでない場合は-1を返し、エラーを識別するためにグローバル変数errnoをセットする。
戻りコードは、以下の errno 値に設定することができます。
| 項目 | 説明 |
|---|---|
| EAGAIN | 要求をキューに入れるために必要なシステム・リソースが使用できないことを示します。 具体的には、送信キューがいっぱいになっているか、オープンの最大数に達している可能性があります。 |
| EBADF | FileDescriptor パラメーターが無効であることを示します。 |
| EFAULT | aiocbp パラメーターで指定されたアドレスが無効であることを示します。 |
| EINVAL | 以下を示します。aio_whenceフィールドに有効な値がないか, あるいは結果のポインターが正しくありません。 aio_read または aio_read64 サブルーチンが、 shm_open サブルーチンへの呼び出しから取得されたファイル・ディスクリプターで使用されました。 |
AIO 要求で入出力完了ポートを使用する場合は、戻りコードを以下の errno 値に設定することもできます。
| 項目 | 説明 |
|---|---|
| EBADF | 以下を示します。aio_iocpfdaiocb 構造体のフィールドが、有効な入出力完了ポート・ファイル記述子ではありません。 |
| EINVAL | AIO 要求を開始しようとしたときに、入出力完了ポート・サービスが失敗したことを示します。 |
| EPERM | 入出力完了ポート・サービスが使用不可であることを示します。 |