Man page - write(2)

Packages contains this manual

Available languages:

en fr it pl nl ja ru ro zh_TW zh_CN de

Manual

WRITE

名 前
書 åŧ
čĒŦ 明
čŋ” り 値
エ ナ ãƒŧ
æē– 拠
æŗ¨ 意
バ グ
é–ĸ 逪 項 į›Ž
こ ぎ 文 書 ãĢ つ い ãĻ

名 前

write - フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ (file descriptor) ãĢ 書 き čžŧ む

書 åŧ

#include <unistd.h>

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

čĒŦ 明

write () は 、 buf か ら 始 ぞ る バ ッ フ ã‚Ą ãƒŧ か ら 、 フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ fd が 参 į…§ す る フ ã‚Ą イ ãƒĢ へ 、 最 大 count バ イ ト を 書 き čžŧ む 。

書 き čžŧ ぞ れ る バ イ ト 数 は count よ り も 小 さ く ãĒ る こ と が あ る 。 例 え ば 、 書 き čžŧ ãŋ 寞 蹥 ぎ į‰Š ᐆ ãƒĄ デ ã‚Ŗ ã‚ĸ ãĢ 十 分 ãĒ 領 域 が ãĒ い å ´ 合 、 ãƒĒ ã‚Ŋ ãƒŧ ゚ 上 限 RLIMIT_FSIZE ãĢ 達 し た å ´ 合 ( setrlimit (2) 参 į…§ )、 count バ イ ト æœĒ æē€ ぎ 書 き čžŧ ãŋ が 行 わ れ た 垌 で å‘ŧ ãŗ å‡ē し が ã‚ˇ グ ナ ãƒĢ ハ ãƒŗ ド ナ ãƒŧ ãĢ よ り 剞 り čžŧ ぞ れ た å ´ 合 、 ãĒ お で あ る 。 ( pipe (7) も 参 į…§ ぎ こ と 。 )

seek 可 čƒŊ ãĒ フ ã‚Ą イ ãƒĢ (つ ぞ り lseek (2) が 遊 ᔍ で き る フ ã‚Ą イ ãƒĢ 、 例 え ば 通 常 ぎ フ ã‚Ą イ ãƒĢ ) で は 、 書 き čžŧ ãŋ は フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト か ら 行 わ れ 、 フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト は 原 際 ãĢ 書 き čžŧ ãŋ が 行 わ れ た バ イ ト 数 分 加 įŽ— さ れ る 。 フ ã‚Ą イ ãƒĢ が O_APPEND で open (2) さ れ た å ´ 合 、 フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト は 書 き čžŧ ãŋ 前 ãĢ フ ã‚Ą イ ãƒĢ ぎ æœĢ å°ž ãĢ 設 厚 さ れ る 。 フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト ぎ čĒŋ 整 と 書 き čžŧ ãŋ 操 äŊœ は ã‚ĸ ト ミ ッ ク ãĒ å‡Ļ ᐆ と し ãĻ 原 行 さ れ る 。

POSIX は write () が 行 ãĒ わ れ た 垌 ãĢ 原 行 し た read (2) が 新 し い デ ãƒŧ ã‚ŋ を čŋ” す こ と を čρ æą‚ し ãĻ い る 。 全 ãĻ ぎ フ ã‚Ą イ ãƒĢ ã‚ˇ ゚ テ ム が POSIX æē– 拠 で は ãĒ い į‚š ãĢ æŗ¨ 意 す る こ と 。

According to POSIX.1, if count is greater than SSIZE_MAX , the result is implementation-defined; see NOTES for the upper limit on Linux.

čŋ” り 値

成 功 す る と 、 書 き čžŧ ぞ れ た バ イ ト 数 が čŋ” さ れ る 。 エ ナ ãƒŧ ぎ å ´ 合 、 -1 が čŋ” り 、 errno ãĢ エ ナ ãƒŧ ぎ 原 因 を į¤ē す 値 が 設 厚 さ れ る 。

Note that a successful write () may transfer fewer than count bytes. Such partial writes can occur for various reasons; for example, because there was insufficient space on the disk device to write all of the requested bytes, or because a blocked write () to a socket, pipe, or similar was interrupted by a signal handler after it had transferred some, but before it had transferred all of the requested bytes. In the event of a partial write, the caller can make another write () call to transfer the remaining bytes. The subsequent call will either transfer further bytes or may result in an error (e.g., if the disk is now full).

count が 0 で 、 fd が 通 常 ぎ フ ã‚Ą イ ãƒĢ (regular file) を 参 į…§ し ãĻ い る å ´ 合 、 write () は 垌 čŋ° ぎ エ ナ ãƒŧ ぎ い ず れ か を 検 å‡ē し た å ´ 合 、 å¤ą 敗 を čŋ” す こ と が あ る 。 エ ナ ãƒŧ が 検 å‡ē さ れ ãĒ か ãŖ た å ´ 合 、 も し く は エ ナ ãƒŧ 検 å‡ē が 原 行 さ れ ãĒ か ãŖ た å ´ 合 、 0 が čŋ” さ れ 、 äģ– ãĢ äŊ• ぎ åŊą éŸŋ も 与 え ãĒ い 。 count が 0 で 、 fd が 通 常 ぎ フ ã‚Ą イ ãƒĢ äģĨ 外 ぎ フ ã‚Ą イ ãƒĢ を 参 į…§ し ãĻ い る å ´ 合 、 そ ぎ įĩ 果 は čĻ 厚 さ れ ãĻ い ãĒ い 。

エ ナ ãƒŧ

EAGAIN

フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ fd が ã‚Ŋ ã‚ą ッ ト äģĨ 外 ぎ フ ã‚Ą イ ãƒĢ を 参 į…§ し ãĻ い ãĻ 、 非 停 æ­ĸ (nonblocking) ãƒĸ ãƒŧ ド ( O_NONBLOCK ) ãĢ 設 厚 さ れ ãĻ お り 、 書 き čžŧ ãŋ を 行 う と 停 æ­ĸ す る įŠļ æŗ ãĢ あ る 。 O_NONBLOCK フ ナ グ ぎ čŠŗ į´° は open (2) を 参 į…§ 。

EAGAIN ぞ た は EWOULDBLOCK

フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ fd が ã‚Ŋ ã‚ą ッ ト を 参 į…§ し ãĻ い ãĻ 、 非 停 æ­ĸ (nonblocking) ãƒĸ ãƒŧ ド ( O_NONBLOCK ) ãĢ 設 厚 さ れ ãĻ お り 、 書 き čžŧ ãŋ を 行 う と 停 æ­ĸ す る įŠļ æŗ ãĢ あ る 。 POSIX.1-2001 は 、 こ ぎ å ´ 合 ãĢ お ãĄ ら ぎ エ ナ ãƒŧ を čŋ” す こ と も čĒ め ãĻ お り 、 こ れ ら 2 つ ぎ 厚 数 が 同 じ 値 を 持 つ こ と も æą‚ め ãĻ い ãĒ い 。 し た が ãŖ ãĻ 、 į§ģ 植 性 が åŋ… čρ ãĒ ã‚ĸ プ ãƒĒ ã‚ą ãƒŧ ã‚ˇ ョ ãƒŗ で は 、 严 æ–š ぎ 可 čƒŊ 性 を įĸē čĒ す ず き で あ る 。

EBADF

fd が 有 劚 ãĒ フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ で ãĒ い か 書 き čžŧ ãŋ ぎ た め ãĢ ã‚Ē ãƒŧ プ ãƒŗ (open) さ れ ãĻ い ãĒ い 。

EDESTADDRREQ

fd が 、 connect (2) を äŊŋ ãŖ ãĻ 通 äŋĄ ᛏ 手 ぎ ã‚ĸ ド ãƒŦ ゚ が 設 厚 さ れ ãĻ い ãĒ い デ ãƒŧ ã‚ŋ グ ナ ム ã‚Ŋ ã‚ą ッ ト を 参 į…§ し ãĻ い る 。

EDQUOT

fd が 参 į…§ す る フ ã‚Ą イ ãƒĢ を åĢ む フ ã‚Ą イ ãƒĢ ã‚ˇ ゚ テ ム ぎ デ ã‚Ŗ ゚ ク ブ ロ ッ ク ぎ ãƒĻ ãƒŧ ã‚ļ ãƒŧ ク り ãƒŧ ã‚ŋ ぎ 上 限 ãĢ 達 し ãĻ い る 。

EFAULT

buf が ã‚ĸ ク ã‚ģ ゚ 可 čƒŊ ãĒ ã‚ĸ ド ãƒŦ ゚ įŠē 間 ぎ 外 ãĢ あ る 。

EFBIG

原 čŖ… 厚 įžŠ ぎ 最 大 フ ã‚Ą イ ãƒĢ ã‚ĩ イ ã‚ē ぞ た は プ ロ ã‚ģ ゚ ぎ フ ã‚Ą イ ãƒĢ ã‚ĩ イ ã‚ē åˆļ 限 を čļ… ãˆ ãĻ フ ã‚Ą イ ãƒĢ ãĢ 書 き čžŧ も う と し た 。 ぞ た は 訹 可 さ れ た ã‚Ē フ ã‚ģ ッ ト 値 ぎ 限 į•Œ を čļ… ãˆ た 先 ぎ äŊ įŊŽ ãĢ 書 き čžŧ も う と し た 。

EINTR

äŊ• ぎ デ ãƒŧ ã‚ŋ も 書 か ãĒ い 間 ãĢ ã‚ˇ グ ナ ãƒĢ ãĢ よ り 剞 り čžŧ ぞ れ た (interrupt)。 signal (7) 参 į…§ 。

EINVAL

fd が 書 き čžŧ ãŋ が 不 遊 切 ãĒ ã‚Ē ブ ジ ェ ク ト を 参 į…§ し ãĻ い る 。 も し く は 、 フ ã‚Ą イ ãƒĢ が O_DIRECT フ ナ グ を 指 厚 し ãĻ ã‚Ē ãƒŧ プ ãƒŗ さ れ ãĻ い る が 、 buf ãĢ 指 厚 さ れ た ã‚ĸ ド ãƒŦ ゚ 、 count ãĢ 指 厚 さ れ た 値 、 フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト ぎ い ず れ か ぎ ã‚ĸ ナ イ ãƒŗ ãƒĄ ãƒŗ ト が 不 遊 切 で あ る 。

EIO

A low-level I/O error occurred while modifying the inode. This error may relate to the write-back of data written by an earlier write (), which may have been issued to a different file descriptor on the same file. Since Linux 4.13, errors from write-back come with a promise that they may be reported by subsequent. write () requests, and will be reported by a subsequent fsync (2) (whether or not they were also reported by write ()). An alternate cause of EIO on networked filesystems is when an advisory lock had been taken out on the file descriptor and this lock has been lost. See the Lost locks section of fcntl (2) for further details.

ENOSPC

fd ãĢ よ ãŖ ãĻ 参 į…§ さ れ る フ ã‚Ą イ ãƒĢ を åĢ む デ バ イ ゚ (device) ãĢ 十 分 ãĒ įŠē き が ãĒ い 。

EPERM

操 äŊœ が file seal ãĢ よ り įρ æ­ĸ さ れ ãĻ い る 。 fcntl (2) 参 į…§ 。

EPIPE

fd が パ イ プ (pipe) か ã‚Ŋ ã‚ą ッ ト (socket) ãĢ æŽĨ įļš ã• れ ãĻ お り 、 そ ぎ 反 寞 側 (čĒ­ ãŋ čžŧ ãŋ 側 ) が ク ロ ãƒŧ ã‚ē (close) さ れ ãĻ い る 。 こ れ が į™ē į”Ÿ し た å ´ 合 ãĢ は 、 書 き čžŧ ãŋ を 行 ãĒ う プ ロ ã‚ģ ゚ は SIGPIPE ã‚ˇ グ ナ ãƒĢ (signal)も 受 け る 。 (し た が ãŖ ãĻ 、 プ ロ グ ナ ム が こ ぎ ã‚ˇ グ ナ ãƒĢ を 捕 į˛ (catch)、 停 æ­ĸ (block)、 į„Ą čĻ– (ignore) し た å ´ 合 ぎ ãŋ 、 write ぎ čŋ” り 値 を 参 į…§ で き る 。 )

fd ãĢ æŽĨ įļš ã• れ た ã‚Ē ブ ジ ェ ク ト ãĢ よ ãŖ ãĻ は 、 äģ– ãŽ エ ナ ãƒŧ が čĩˇ こ る か も し れ ãĒ い 。

æē– 拠

SVr4, 4.3BSD, POSIX.1-2001.

SVr4 で は write が 剞 り čžŧ ぞ れ る と 、 デ ãƒŧ ã‚ŋ が 書 き čžŧ ぞ れ る į›´ 前 で は ãĒ く 、 そ ぎ 時 į‚š で EINTR が čŋ” る 。

æŗ¨ 意

The types size_t and ssize_t are, respectively, unsigned and signed integer data types specified by POSIX.1.

A successful return from write () does not make any guarantee that data has been committed to disk. On some filesystems, including NFS, it does not even guarantee that space has successfully been reserved for the data. In this case, some errors might be delayed until a future write (), fsync (2), or even close (2). The only way to be sure is to call fsync (2) after you are done writing all your data.

write () が 1 バ イ ト も 書 き čžŧ ぞ ãĒ い う ãĄ ãĢ ã‚ˇ グ ナ ãƒĢ ハ ãƒŗ ド ナ ãƒŧ ãĢ よ り 剞 り čžŧ ぞ れ た å ´ 合 、 write () は エ ナ ãƒŧ EINTR で å¤ą 敗 す る 。 1バ イ ト で も 書 き čžŧ ん だ 垌 で 剞 り čžŧ ぞ れ た å ´ 合 ãĢ は 、 write () は 成 功 し 、 書 き čžŧ ん だ バ イ ト 数 を čŋ” す 。

On Linux, write () (and similar system calls) will transfer at most 0x7ffff000 (2,147,479,552) bytes, returning the number of bytes actually transferred. (This is true on both 32-bit and 64-bit systems.)

An error return value while performing write () using direct I/O does not mean the entire write has failed. Partial data may be written and the data at the file offset on which the write () was attempted should be considered inconsistent.

バ グ

POSIX.1-2008/SUSv4 ã‚ģ ク ã‚ˇ ョ ãƒŗ XSI 2.9.7 ("Thread Interactions with Regular File Operations") ãĢ よ る と 、

äģĨ 下 ぎ す ず ãĻ ぎ é–ĸ 数 で は 、 通 常 フ ã‚Ą イ ãƒĢ も し く は ã‚ˇ ãƒŗ ボ ãƒĒ ッ ク ãƒĒ ãƒŗ ク ãĢ 寞 す る 操 äŊœ で は POSIX.1-2008 で čĻ 厚 さ れ た 劚 果 が äē’ ã„ ãĢ ã‚ĸ ト ミ ッ ク ãĢ 行 わ れ ãĒ け れ ば ãĒ ら ãĒ い : ...

こ ぎ 垌 ãĢ 書 か れ ãĻ い る API ぎ 中 ãĢ write () と writev (2) で あ る 。 ゚ ãƒŦ ッ ド īŧˆ や プ ロ ã‚ģ ゚ ) 間 で ã‚ĸ ト ミ ッ ク ãĢ 遊 ᔍ す る こ と が æą‚ め ら れ る 劚 果 ぎ 一 つ と し ãĻ 、 フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト ぎ 更 新 が あ る 。 し か し ãĒ が ら 、 バ ãƒŧ ジ ョ ãƒŗ 3.14 よ り 前 ぎ Linux で は 、 こ ぎ 限 り で は ãĒ い 。 ã‚Ē ãƒŧ プ ãƒŗ フ ã‚Ą イ ãƒĢ 記 čŋ° (open file description) を å…ą 有 す る 2 つ ぎ プ ロ ã‚ģ ゚ が 同 時 ãĢ write () (や writev (2)) を 原 行 し た å ´ 合 、 こ ぎ I/O 操 äŊœ で は フ ã‚Ą イ ãƒĢ ã‚Ē フ ã‚ģ ッ ト ぎ 更 新 ãĢ é–ĸ し ãĻ は ã‚ĸ ト ミ ッ ク で は ãĒ く 、 2 つ ぎ プ ロ ã‚ģ ゚ か ら å‡ē 力 さ れ る デ ãƒŧ ã‚ŋ ブ ロ ッ ク が (間 違 ãŖ ãĻ ) 重 ãĒ る 可 čƒŊ 性 が あ る 。 こ ぎ 問 題 は Linux 3.14 で äŋŽ æ­Ŗ さ れ た 。

é–ĸ 逪 項 į›Ž

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 プ ロ ジ ェ ク ト ぎ ãƒĒ ãƒĒ ãƒŧ ゚ 5.10 ぎ 一 部 で あ る 。 プ ロ ジ ェ ク ト ぎ čĒŦ 明 と バ グ å ą 告 ãĢ é–ĸ す る 情 å ą は https://www.kernel.org/doc/man-pages/ ãĢ 書 か れ ãĻ い る 。