read、readx、 read64x、readv、readvx、eread、ereadv、pread、または preadv サブルーチン
目的
ファイルから読み取る。
ライブラリー
| 項目 | 説明 |
|---|---|
| 読み取り, Readx, READV, Readvx, read64x, スプレッド, プリアドフ | 標準 C ライブラリー (libc.a) |
| 読み取り, 読み取り | MLS ライブラリー (libmls.a) |
構文
#include <unistd.h> ssize_t read (FileDescriptor, Buffer, NBytes)
int FileDescriptor;
void * Buffer;
size_t NBytes; int readx (FileDescriptor, Buffer, NBytes, Extension)
int FileDescriptor;
char * Buffer;
unsigned int NBytes;
int Extension; int read64x (FileDescriptor, Buffer, NBytes, Extension)
int FileDescriptor;
void *Buffer;
size_t NBytes;
void *Extension;
ssize_t pread (int fildes, void *buf, size_t nbyte, off_t offset); #include <sys/uio.h> ssize_t readv (FileDescriptor, iov, iovCount)
int FileDescriptor;
const struct iovec * iov;
int iovCount; ssize_t readvx (FileDescriptor, iov, iovCount, Extension)
int FileDescriptor;
struct iovec *iov;
int iovCount;
int Extension; #include <unistd.h>
#include <sys/uio.h> ssize_t preadv (
int FileDescriptor,
const struct iovec * iov,
int iovCount,
offset_t offset); ssize_t eread (FileDescriptor, Buffer, Nbytes, labels)
int FileDescriptor;
const void * Buffer;
size_t NBytes;
sec_labels_t * labels;
ssize_t ereadv (FileDescriptor, iov, iovCount, labels)
int FileDescriptor;
const struct iovec * iov;
int iovCount;
sec_labels_t * labels;
説明
read サブルーチンは、 FileDescriptor パラメーターに関連したファイルから、 Buffer パラメーターが指すバッファーに NBytes のデータを読み取ろうとします。
readv サブルーチンは同じアクションを実行しますが、 iov パラメーターが指す iovec 構造体の配列によって指定される iovCount バッファーに入力データを分散させます。 各 Iovec 項目は、データを入れる必要があるメモリー内の領域の基底アドレスと長さを指定します。 READV サブルーチンは、次の処理に進む前に、常に区域を完全に埋めます。
Readx サブルーチンと Readvx サブルーチンは、それぞれ 読み取り サブルーチンと READV サブルーチンと同じですが、一部のデバイス・ドライバーから読み取るとき、およびディレクトリーを読み取るときに必要な 拡張 パラメーターが追加されています。 ディレクトリーは直接読み取ることができますが、 OpenDIR 呼び出しと Readdir 呼び出しは、より移植性の高いインターフェースであるため、代わりに使用します。
シーク可能な通常のファイルおよびデバイスでは、 read は、 FileDescriptor パラメーターに関連付けられたファイル・ポインターによって指定されたファイル内の位置から始まります。 読み取り サブルーチンから戻ると、ファイル・ポインターは、実際に読み取られたバイト数だけ増分されます。
シークできないデバイスは、常に現在位置から読み取られます。 そのようなファイルに関連付けられているファイル・ポインターの値は未定義です。
ディレクトリの場合、 readvxサブルーチンは、FileDescriptorパラメータに関連付けられたファイルポインタで指定された位置から開始する。 このファイル・ポインターの値は、0、またはこのディレクトリーの Readvx サブルーチンに対する直前の呼び出しの直後にファイル・ポインターが持っていた値のいずれかでなければなりません。 Readvx サブルーチンから戻ると、ファイル・ポインターは、バッファーにコピーされたバイト数に対応しない数だけ増分します。
システムが空のパイプ (先入れ先出し (FIFO)) から読み取ろうとすると、次のようになります。
- 書き込み用のパイプが開かれているプロセスがない場合、 読み取り はファイルの終わりを示す 0 を戻します。
- 何らかのプロセスが、書き込みのためにパイプをオープンしている場合:
- O_NDELAY (Y) および O_ 非ブロック がクリアされている場合 (デフォルト)、 読み取り は、一部のデータが書き込まれるか、パイプを書き込み用にオープンするすべてのプロセスによってパイプがクローズされるまでブロックします。
- O_NDELAY (Y) が設定されている場合、 読み取り サブルーチンは値 0 を戻します。
- O_NONBLOCK が設定されている場合、 read サブルーチンは -1 の値を戻し、グローバル変数 errno を EAGAINに設定します。
システムが、端末などの非ブロッキング読み取りをサポートするキャラクター・スペシャル・ファイルから読み取ろうとして、使用可能なデータがない場合。
- O_NDELAY (Y) および O_ 非ブロック がクリアされている場合 (デフォルト)、 読み取り サブルーチンはデータが使用可能になるまでブロックします。
- O_NDELAY (Y) が設定されている場合、 読み取り サブルーチンは 0 を返します。
- O_NONBLOCK が設定されている場合、 read サブルーチンは -1 を戻し、使用可能なデータがない場合は、 errno グローバル変数を EAGAIN に設定します。
システムが強制モード・レコード・ロックをサポートする通常ファイルを読み取ろうとしていて、読み取る領域の全部または一部が別のプロセスによってロックされている場合:
- O_NDELAY (Y) および O_ 非ブロック がクリアされている場合、 読み取り はロックが解放されるまで呼び出しプロセスをブロックします。
- O_NDELAY または O_NONBLOCK が設定されている場合、 read は -1 を戻し、グローバル変数 errno をEAGAINに設定します。
割り込まれた 読み取り サブルーチンの動作は、到着するシグナルのハンドラーがどのようにインストールされたかによって異なります。
ハンドラーがインストールされていて、サブルーチンを再始動してはならないことが示されている場合、 read サブルーチンは -1 の値を戻し、グローバル変数 errno は EINTR に設定されます (一部のデータが既に除去されている場合でも)。
ハンドラーがインストールされている場合は、サブルーチンを再始動する必要があることを示します。
- 割り込みが処理されたときにデータが読み取られなかった場合、この 読み取り は値を戻しません (再始動されます)。
- 割り込みが処理されたときにデータが読み取られた場合、この 読み取り サブルーチンは除去されたデータの量を戻します。
read64x サブルーチンは、 Readx サブルーチンと同じです。ここで、 拡張 パラメーターは、 j2_ext 構造体へのポインターです ( j2/j2_cntl.h ファイルを参照)。 read64x サブルーチンは、暗号化されたファイルをロー・モードで読み取るために使用されます ( fcntl.h ファイルの O_RAW を参照してください)。 暗号化されたファイルで O_RAW フラグを使用する場合は、通常のファイルで O_DIRECT を使用する場合と同じ制限があります。
読み取り および エレディフ サブルーチンは、ストリームから読み取り、メッセージを取り出します。 eread サブルーチンは、データのバイト数をバッファーから FileDescriptor パラメーターに関連したストリームにコピーします。 N バイト パラメーターは、バイト数を指定します。 バッファー パラメーターはバッファーを指します。 セキュリティー情報は、 ラベル パラメーターが指す構造体に戻されます。
スプレッド 関数は、ファイル・ポインターを変更せずにファイル内の特定の位置から読み取ることを除き、 読み取りと同じアクションを実行します。 スプレッド の最初の 3 つの引数は、 読み取り と同じですが、ファイル内の目的の位置のオフセットである 4 番目の引数が追加されています。 シークできないファイルに対して スプレッド を実行しようとすると、エラーになります。
ssize_t pread64(int fildes , void *buf , size_t nbytes , off64_t offset) pread64 サブルーチンは スプレッド と同じアクションを実行しますが、ファイル記述子に関連付けられているファイルがブロック特殊ファイルまたは文字特殊ファイルの場合は、ファイル記述子と DEV_OFF_MAX に関連付けられているファイルの最大ファイル・サイズに対するオフセットの制限があります。 フィルド がソケットを参照する場合、 読み取り はフラグが設定されていない 受信 サブルーチンと同等です。
シャM_OPEN サブルーチンへの呼び出しから取得したファイル・ディスクリプターを使用して 読み取り サブルーチンまたは スプレッド サブルーチンを使用すると、 ENXIO (X)で失敗します。
プリアドフ サブルーチンは、 READV サブルーチンと同じアクションを実行します。ただし、 プリアドフ サブルーチンは、ファイル・ポインターを変更せずにファイル内の特定の位置から読み取ります。 プリアドフ サブルーチンの最初の 3 つの引数は、 READV サブルーチンと同じですが、ファイル内の必要な位置を指す オフセット 引数が追加されています。 プリアドフ サブルーチンが読み取るファイルがシークできない場合は、エラーが発生します。
パラメーター
| 項目 | 説明 |
|---|---|
| FileDescriptor | 読み取るオブジェクトを識別しているファイル・ディスクリプター。 |
| 拡張子 | より多くの情報を必要とする、または追加の状況を返すキャラクター・デバイス・ドライバーとの通信を提供します。 各ドライバーは、 拡張 パラメーターを値または通信域へのポインターとして、装置依存の方法で解釈します。 拡張 パラメーターの値が 0 の場合、ドライバーは適切なデフォルトを適用する必要があります。 ディレクトリーの場合、 拡張 パラメーターは、ディレクトリー項目を返す必要があるフォーマットを決定します。
磁気テープ装置の場合、 拡張 パラメーターは、磁気テープ・ドライブが可変ブロック・モードで、読み取り要求がテープのブロック・サイズより小さいときの Readx サブルーチンの応答を決定します。
|
| IOV | データが配置されるバッファーを識別する Iovec 構造体の配列を指します。 iovec 構造体は、 sys/uio.h ファイルに定義され、以下のメンバーを含んでいます。 |
| iovCount | IOV パラメーターが指す Iovec 構造の数を指定します。 |
| buffer | バッファーを指します。 |
| nbytes | FileDescriptorパラメータに関連付けられたファイルから読み込んだバイト数を指定します。 注: テープを読み取る場合、 読み取り サブルーチンは、サブルーチンを呼び出すたびに物理テープ・ブロックを使用します。 物理データ・ブロック・サイズが N バイト パラメーターで指定されたサイズより大きい場合、読み取りによって指定されたバッファーにすべてのデータが収まらないため、エラーが戻されます。
テープ上の不明なブロック・サイズが原因で発生する読み取りエラーを回避するには、 N バイト パラメーターを大きい値 ( 32K バイトなど) に設定します。 |
| OFFSET | 読み取りが開始されるファイル内の位置。 |
| labels (ラベル) | 拡張セキュリティー属性構造体を指します。 |
戻り値
正常終了すると、 読み取り、 Readx、 read64x、 READV、 Readvx、 スプレッド、および プリアドフ サブルーチンは、読み取られてバッファーに入れられたバイト数を戻します。 システムは、記述子が、ファイルの終わりに達する前に残されたバイト数と同じバイト数を持つ通常ファイルを参照する場合、要求されたバイト数を読み取ることを保証しますが、それ以外の場合は保証しません。
ファイルの終わりに達すると、値 0 が戻されます。 (通信ファイルについては、 Ioctl ファイルと テルミオ ファイルを参照してください。)
それ以外の場合は、値 -1 が戻され、グローバル変数 errno がエラーを識別するように設定され、 Buffer または iov パラメーターが指すバッファーの内容は不確定です。
正常終了すると、 読み取り および エレディフ サブルーチンは値 0 を戻します。 それ以外の場合は、エラーを識別するためにグローバル変数 エラー番号 が設定されます。
エラー・コード
読み取り、 Readx、 read64x、 READV、 Readvx、 スプレッド、 読み取り、 エレディフ、および プリアドフ サブルーチンは、以下の 1 つ以上が該当する場合には失敗します。
| 項目 | 説明 |
|---|---|
| EBADMSG | ファイルは通常制御モードに設定されている STREAM ファイルであり、読み取りを待機しているメッセージには制御パーツが含まれています。 |
| EBADF | FileDescriptor パラメーターは、読み取り用にオープンされた有効なファイル記述子ではありません。 |
| EINVAL | FileDescriptor パラメーターに関連したファイル位置ポインターが負の値でした。 |
| EINVAL | IOV 配列内の IOV_LEN 値の合計が負の値であったか、32 ビット整数にオーバーフローしました。 |
| EINVAL | iovCount パラメーターの値が 1 から 16 ではありませんでした。 |
| EINVAL | OFF_MAX より大きい N バイト パラメーターの値が、32 ビット・カーネル上で要求されました。 この問題は、32 ビット・カーネルで実行されている 64 ビット・アプリケーションからシステム・コールが要求された場合に発生します。 |
| 項目 | 説明 |
|---|---|
| EINVAL | FileDescriptor によって参照される STREAM またはマルチプレクサーは、マルチプレクサーからダウンストリームに (直接または間接に) リンクされます。 |
| EAGAIN | ファイルに非ブロッキング入出力のマークが付けられましたが、読み取る準備ができたデータがありませんでした。 |
| EFAULT | バッファー または IOV の一部が、プロセスの割り振り済みアドレス・スペースの外部の位置を指しています。 |
| EFAULT | ユーザーには、 バッファーにアクセスする権限がありません。 |
| EDEADLK | 読み取り対象の領域がアンロックされるまで呼び出しプロセスをスリープさせると、デッドロックが発生します。 |
| EINTR | データが到着する前に 読み取り がシグナルによって割り込まれ、サブルーチンが再始動されないことを示すシグナル・ハンドラーがインストールされました。 |
| EIO | ファイル・システムの読み取り中に、入出力エラーが発生しました。 |
| EIO | プロセスが、制御端末から読み取ろうとしているバックグラウンド・プロセスのメンバーであり、そのプロセスが シティチン シグナルを無視またはブロックしているか、プロセス・グループに親プロセスがありません。 |
| EFBIG | 32 ビット・カーネルで 最大ファイル・サイズ より大きいオフセットが要求されました。 |
| ENXIO | 読み取り または スプレッド サブルーチンが、 シャM_OPEN サブルーチンへの呼び出しから取得されたファイル・ディスクリプターと共に使用されました。 |
| 項目 | 説明 |
|---|---|
| EOVERFLOW | NBytes がゼロより大きく、開始オフセットがファイルの終わりより前で、 FileDescriptorに関連付けられたオープン・ファイル記述で設定されたオフセット最大値以上である通常ファイルからの読み取りが試行されました。 |
読み取り、 Readx、 READV、 Readvx、 スプレッド、および プリアドフ サブルーチンは、以下の条件が満たされている場合は失敗する可能性があります。
| 項目 | 説明 |
|---|---|
| ENXIO | 要求が存在しない装置で作成されたか、要求が装置の機能の範囲外でした。 |
| ESPIPE | フィルド は、パイプまたは FIFO に関連付けられています。 |
ネットワーク・ファイル・システム (NFS) がシステムにインストールされている場合、以下の条件が満たされていると、 read システム・コールも失敗する可能性があります。
| 項目 | 説明 |
|---|---|
| ETIMEDOUT | 接続がタイムアウトになりました。 |
| 項目 | 説明 |
|---|---|
| EINVAL | j2_ext 構造体が正しく初期化されませんでした。 例えば、バージョンが間違っていたか、ファイルが暗号化されていませんでした。 |
| EINVAL | ロー・モードで開かれていないファイルに対して J2EXTCMD_RDRAW コマンドを発行して、 j2_ext 構造が渡されました。 |
| 項目 | 説明 |
|---|---|
| ENOMEM | メモリーまたはスペースが小さすぎます。 |
| EACCES | アクセス権がありません。 ユーザーには、データを読み取るための十分な特権がありません。 |
| 再始動 | 再始動 は、システム呼び出しが再始動可能かどうかを判別するために使用されます。 |
| 項目 | 説明 |
|---|---|
| EINVAL | iovCount パラメーターの値が 15 を超えています。 |