other versions
other languages
other sections
WRITE(2) | Linux Programmer's Manual | WRITE(2) |
名前¶
write - ファイルディスクリプタ (file descriptor) に書き込む書式¶
#include <unistd.h>説明¶
write() は、 buf が指すバッファから、ファイルディスクリプタ fd が参照するファイルへ、最大 count バイトを書き込む。返り値¶
成功した場合、書き込まれたバイト数が返される (ゼロは何も書き込まれなかったことを示す)。 エラーならば -1 が返され、 errno が適切に設定される。エラー¶
- EAGAIN
- ファイルディスクリプタ fd がソケット以外のファイルを参照していて、 非停止 (nonblocking) モード ( O_NONBLOCK) に設定されており、書き込みを行うと停止する状況にある。
- EAGAIN または EWOULDBLOCK
- ファイルディスクリプタ fd がソケットを参照していて、非停止 (nonblocking) モード ( O_NONBLOCK) に設定されており、書き込みを行うと停止する状況にある。 POSIX.1-2001 は、この場合にどちらのエラーを返すことも認めており、 これら 2 つの定数が同じ値を持つことも求めていない。 したがって、移植性が必要なアプリケーションでは、両方の可能性を 確認すべきである。
- EBADF
- fd が有効なファイルディスクリプタでないか書き込みのためにオープン (open) されていない。
- EDESTADDRREQ
- fd が、 connect(2) を使って通信相手のアドレスが設定されていないデータグラムソケットを 参照している。
- EFAULT
- buf がアクセス可能なアドレス空間の外にある。
- EFBIG
- 実装定義の最大ファイルサイズまたはプロセスのファイルサイズ制限を 超えてファイルに書き込もうとした。 または許可されたオフセット値の限界を超えた先の位置に 書き込もうとした。
- EINTR
- 何のデータも書かない間にシグナルにより割り込まれた (interrupt)。 signal(7) 参照。
- EINVAL
- fd が書き込みが不適切なオブジェクトを参照している。 もしくは、ファイルが O_DIRECT フラグを指定してオープンされているが、 buf に指定されたアドレス、 count に指定された値、 現在のファイルオフセットのいずれかの アラインメントが不適切である。
- EIO
- inode の修正中に低レべル (low-level) I/O エラーが発生した。
- ENOSPC
- fd によって参照されるファイルを含むデバイス (device) に十分な空きがない。
- EPIPE
- fd がパイプ (pipe) かソケット (socket) に接続されており、 その反対側 (読み込み側) がクローズ (close) されている。 これが発生した場合には、書き込みを行なうプロセスは SIGPIPE シグナル (signal)も受ける。 (したがって、プログラムがこのシグナルを捕獲 (catch)、停止 (block)、無視 (ignore) した場合のみ、write の返り値を参照できる。)
準拠¶
SVr4, 4.3BSD, POSIX.1-2001.注意¶
write() が成功して返ってきても、データがディスクに記録されたことを 保証するものではない。 実際、データのためのスペースが確保されたことすら保証されないという バグっぽい実装もある。 これを確実にする唯一の方法は、 全てのデータを write した後に fsync(2) を呼び出すことである。関連項目¶
close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2), fwrite(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2010-08-29 | Linux |