Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ readv(2) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

dup(2)

fcntl(2)

open(2)

pipe(2)

select(2)

socket(2)

socketpair(2)

READ(2)  —  NEWS-OS Programmer’s Manual

名称

read, readv − 入力を読み取る

形式

cc = read(d, buf, nbytes)
int cc, d;
char ∗buf;
int nbytes;

#include <sys/types.h>
#include <sys/uio.h>

cc = readv(d, iov, iovcnt)
int cc, d;
struct iovec ∗iov;
int iovcnt;

解説

read は、 ディスクリプタ d で指されたオブジェクトから、 nbytes のデータを buf によって指し示されたバッファへ読み込みます。 readv も同様の働きを しますが、 入力データは、 array: iov[0], iov[1], ..., iov[iovcnt−1] のメンバによって指定された iovcnt 個のバッファへ分散されます。

readv では、 iovec 構造体は次のように定義されています。

struct iovec {
caddr_tiov_base;
intiov_len;
};

各 iovec エントリは、 データが置かれるメモリ内のベースアドレスと領域の長さを 指定します。 readv は常に、 次へ進む前に 1 つの領域を 完全に満たします。

シーキングのできるオブジェクトに対しては、 read は、 d に関するポインタによって与えられた位置から開始します ( lseek(2) 参照)。 read からのリターンがあると、 このポインタは、 実際に読み取られたバイトの数だけインクリメントされます。

シーキングのできないオブジェクトでは、 常に現在の位置から開始します。 そのようなオブジェクトに関するポインタの値は、 不定です。

正常に終了すると、 read と readv は、 実際に読み取られ、 バッファに収められたバイトの数を 返します。 ディスクリプタが end-of-file の前に多くのバイトが残されている通常のファイルを 指している場合に限り、 システムは、 要求されたバイト数の読み取りを 保証します。

返された値が 0 である場合は、 end-of-file に到達してしまったことを 示します。

リターン値

コールが成功すると、 実際に読み取られたバイトの数が返されます。 そうでない場合には、 −1 が返され、 グローバル変数 errno がエラーを 示すようにセットされます。

エラー

次の項目のうち、1 つ以上が真である場合には、 read と readv は失敗します。

[EBADF] d が読み取りのためにオープンされている有効なファイル またはソケットではない。

[EFAULT] buf が、 割り当てられているアドレススペースの外を 指している。

[EIO] ファイルシステムから読み取りを 行っている間に、 入出力エラーが発生した。

[EINTR] 速度の遅いデバイスからの読み取りが、 データが到着する前にシグナルによって割り込まれた。

[EINVAL] d に関するポインタが負である。

[EWOULDBLOCK]
ファイルがブロッキングでない入出力のためにマークされていて、 かつ、 読み取れる状態のデータがなかった。

上記のエラーのほかに、 readv は次のエラーの 1 つを 返すことがあります。

[EINVAL] iovcnt が、 0 に等しいかそれより小さかった、 または 16 より大きかった。

[EINVAL] 配列 iov 内の iov_len 値の 1 つが負であった。

[EINVAL] 配列 iov 内の iov_len 値の合計が、 32 ビットの整数を オーバーフローした。

[EFAULT] iov の一部が、 そのプロセスの割り当てアドレススペースの外を 指している。

関連事項

dup(2), fcntl(2), open(2), pipe(2), select(2), socket(2), socketpair(2)

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026