Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       read - ファイルディスクリプタから読み込む

書式

       #include <unistd.h>

       ssize_t read(int fd, void *buf, size_t count);

説明

       read()   はファイルディスクリプタ (file descriptor)  fd から最大 count バイトを buf で始ま
       るバッファーへ読み込もうとする。

       seek  に対応しているファイルでは、read  は現在のファイルオフセットから行われ、ファイルオフ
       セットは読み込んだバイト数分だけ進められる。現在のファイルオフセットがファイル末尾かそれよ
       り先の場合は、読み出しは行われず、 read() は 0 を返す。

       count が 0 の場合、 read() は以下で説明するエラーを検出する場合がある。 どのエラーもなかっ
       た場合、もしくは  read()  がエラーのチェックを行わない場合、  count  が  0  で呼び出された
       read() は 0 を返し、何も行わない。

       countSSIZE_MAX より大きければ、結果は規定できない。

返り値

       成功した場合、読み込んだバイト数を返す (0 はファイルの終りを意味する)。 ファイル位置はこの
       数だけ進められる。  この数が要求した数より小さかったとしてもエラーではない; 例えば今すぐに
       は実際にそれだけの数しかない場合 (ファイルの最後に近いのかも しれないし、パイプ (pipe)  や
       端末  (terminal) から読み込んでいるかもしれない) や read()  がシグナル (signal) によって割
       り込まれた場合にこれは起こりえる。 エラーの場合は、-1  が返され、  errno  が適切に設定され
       る。この場合はファイル位置が変更されるかどうかは 不定である。

エラー

       EAGAIN ファイルディスクリプタ     fd    がソケット以外のファイルを参照していて、    非停止
              (nonblocking) モード (O_NONBLOCK)  に設定されており、読み込みを行うと停止する状況に
              ある。

       EAGAIN または EWOULDBLOCK
              ファイルディスクリプタ  fd  がソケットを参照していて、非停止  (nonblocking)  モード
              (O_NONBLOCK)  に設定されており、読み込みを行うと停止する状況にある。   POSIX.1-2001
              は、この場合にどちらのエラーを返すことも認めており、  これら 2 つの定数が同じ値を持
              つことも求めていない。 したがって、移植性が必要なアプリケーションでは、両方の可能性
              を 確認すべきである。

       EBADF  fd  が有効なファイルディスクリプタでないか、読み込みのために オープン (open) されて
              いない。

       EFAULT buf がアクセス可能なアドレス空間の外にある。

       EINTR  何のデータも読み込まないうちにシグナルに割り込まれた。 signal(7)  参照。

       EINVAL fd    は読み込みに適していないオブジェクトを参照している。     もしくは、ファイルが
              O_DIRECT フラグを指定してオープンされているが、 buf に指定されたアドレス、 count に
              指定された値、 現在のファイルオフセットのいずれかの アラインメントが不適切である。

       EINVAL fdtimerfd_create(2)  の呼び出しで作成されたが、 read()   に間違ったサイズのバッ
              ファが渡された。 さらなる情報は timerfd_create(2)  を参照のこと。

       EIO    I/O  エラー。これは例えばプロセスがバックグランド・プロセスグループで、それを制御し
              ている端末から読み込もうとし、 SIGTTIN が無視 (ignore) または禁止 (blocking) されて
              いる場合や、  そのプロセスグループが孤立 (orphan) している場合に起こる。 またディス
              クやテープを読んでいる時に低レベル I/O エラー が発生した場合にも起こる。

       EISDIR fd がディレクトリを参照している。

       fd が接続しているオブジェクトによっては他のエラーも起こりえる。  POSIX  では、  いくらかの
       データを読んだ後に割り込みが起こった場合、  read()  は (errnoEINTR を設定して) -1 を返
       してもよいし、 既に読み込んだバイト数を返してもよい。

準拠

       SVr4, 4.3BSD, POSIX.1-2001.

注意

       NFS  において。少量のデータを読み込む場合、最初の時のみにタイム   スタンプが更新され、続く
       コールでは更新されないだろう。    これはクライアント側で属性のキャッシングを行なうためであ
       る。 なぜならば、もし全ての NFS クライアントが st_atime (最終ファイルアクセス時刻)  の更新
       をサーバーに送らず、クライアント側でキャッシュを読むことに満足して  いれば、サーバー側での
       read は発生しないので st_atime の更新は行なわれからだ。 UNIX  の方式では、クライアント側の
       属性のキャッシングを無効にすることで、  これを得ることができる。しかしほとんどの状況ではこ
       れは続くサーバーの 負荷を増加させ、パフォーマンスの低下をもたらす。

関連項目

       close(2),  fcntl(2),  ioctl(2),  lseek(2),  open(2),  pread(2),  readdir(2),  readlink(2),
       readv(2), select(2), write(2), fread(3)

この文書について

       この  man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。