READ

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

read readv pread - 入力を読み取る  

索引

ライブラリ

Lb libc  

索引

書式

In sys/types.h In sys/uio.h In unistd.h Ft ssize_t Fn read int d void *buf size_t nbytes Ft ssize_t Fn readv int d const struct iovec *iov int iovcnt Ft ssize_t Fn pread int d void *buf size_t nbytes off_t offset  

索引

解説

Fn read システムコールは、記述子 Fa d で参照されたオブジェクトから Fa buf が指すバッファへ Fa nbytes のデータを読み取ろうとします。 Fn readv システムコールは同様の処理を実行しますが、配列 Fa iov : iov[0], iov[1], ..., iov[iovcnt-1] のメンバで指定される Fa iovcnt 個のバッファに入力データを分散させます。 Fn pread システムコールは同様の機能を実行しますが、 ファイル内の指定の位置から読み取った後、 ファイルポインタを変更しません。

Fn readv に対する Fa iovec 構造体は次のように定義されます:

struct iovec {
        void   *iov_base;  /* ベースアドレス */
        size_t iov_len;    /* 長さ */
};

Fa iovec の各エントリは、データを配置するべきメモリ領域のベースアドレスと 長さを指定しています。 Fn readv システムコールは、次のエントリに進む前に必ず領域を完全に満たします。

シーク可能なオブジェクト上では Fn read は Fa d に結び付けられたポインタが指定する位置から開始します ( lseek(2) を参照)。 Fn read からの戻り時に、ポインタは実際に読み取られたバイト数だけ増加させられます。

シークできないオブジェクトは必ず現在の位置から読み取られます。 そのようなオブジェクトに結び付けられたポインタの値は未定義です。

処理が成功すると、 Fn read , Fn readv および Fn pread は、実際に読み取られバッファ内に配置されたバイト数を返します。 記述子が通常ファイルを参照しており、 ファイルの終端までに十分な量のバイトがあれば、 システムは要求されたバイト数を読み取ることを保証しますが、 他のケースではそうではありません。  

索引

戻り値

正常に完了すると、実際に読み取られたバイト数が返されます。 ファイル終了 (EOF) が読み取られると 0 が返されます。 そうでない場合は -1 が返され、エラーを示すためにグローバル変数 errno が設定されます。  

索引

エラー

Fn read , Fn readv および Fn pread システムコールは次の場合を除いて正常に完了します:

Bq Er EBADF
Fa d 引数は読取り用にオープンされた有効なファイルまたは ソケットの記述子ではありません。
Bq Er EFAULT
Fa buf 引数は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
Bq Er EIO
ファイルシステムから読み取っている間に入出力エラーが発生しました。
Bq Er EINTR
データが到着する前に、シグナルの配送により低速デバイスからの読取りが 割り込まれました。
Bq Er EINVAL
Fa d に結び付けられたポインタが負でした。
Bq Er EAGAIN
ファイルは非ブロッキング入出力とマークされており、 読取りの準備ができたデータがありません。
Bq Er EISDIR
ファイル記述子が、ディレクトリ上での普通の読み込み操作を許可していない ファイルシステム (例えば NFS) に属しているディレクトリに 関連付けられています。
Bq Er EOPNOTSUPP
ファイル記述子が、普通の読み込み操作を許可していないファイルシステムおよび ファイルタイプに関連付けられています。
Bq Er EOVERFLOW
ファイル記述子が普通のファイルに関連付けられていて、 Fa nbytes が 0 よりも大きく、 Fa offset がファイルの末尾の前にあり、かつ Fa offset がこのファイルシステムに収まるオフセットの最大値以上です。

さらに、 Fn readv は次のエラーのうちの 1 つを返すことがあります:

Bq Er EINVAL
Fa iovcnt 引数が 0 以下であるか、または IOV_MAX より大きくなっています。
Bq Er EINVAL
Fa iov 配列の中の Fa iov_len 値の 1 つが負でした。
Bq Er EINVAL
Fa iov 配列の中の Fa iov_len 値の合計が 32 ビット整数をオーバフローしました。
Bq Er EFAULT
Fa iov の一部が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

Fn pread システムコールは次のエラーを返すこともあります:

Bq Er EINVAL
Fa offset の値が負です。
Bq Er ESPIPE
ファイル記述子がパイプ、ソケット、または FIFO に結び付けられています。

 

索引

関連項目

dup(2), fcntl(2), getdirentries(2), open(2), pipe(2), select(2), socket(2), socketpair(2), fread(3), readdir(3)  

索引

規格

Fn read システムコールは St -p1003.1-90 に適合しています。 Fn readv システムコールと Fn pread システムコールは St -xpg4.2 に適合しています。  

索引

歴史

Fn pread 関数は AT&T System V.4 で登場しました。 Fn readv システムコールは BSD 4.2 で登場しました。 Fn read 関数は AT&T System v6 で登場しました。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
規格
歴史

jman



Time: 07:06:29 GMT, January 12, 2009