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
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 規格
-
- 歴史
-
Time: 07:06:29 GMT, January 12, 2009