write

ëªì¹
     write, writev, pwrite — ì¶ë ¥ì 기ë¡

íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬
     Standard C Library (libc, -lc)

ìì
     <sys/types.h> <sys/uio.h> <unistd.h> ssize_t write(int d, const void
     *buf, size_t nbytes) ssize_t writev(int d, const struct iovec *iov, int
     iovcnt) ssize_t pwrite(int d, const void *buf, size_t nbytes, off_t
     offset)

í´ì¤
     write() (ì)ë, buf íì§ë§ ê°ë¦¬í¤ë ë²í¼ë¡ë¶í° 기ì ì d íì§ë§ 참조íë
     ì¤ë¸ì í¸ì nbytes ì ë°ì´í°ë¥¼ ì°ê¸° ì´ì (ë²ì¨)ë¡ í©ëë¤.  writev() (ì)ë ê°ì
     ëìì í©ëë¤ë§, iov[0], iov[1], ..., iov[iovcnt-1] ë¼ê³  íë¤ iov ë°°ì´ì
     멤ë²ê° ì§ì íë¤ iovcnt ë²í¼ë¡ë¶í° ì¶ë ¥ ë°ì´í°ë¥¼ 모ìëë¤.  pwrite() (ì)ë
     ê°ì 기ë¥ì ì¤íí©ëë¤ë§, íì¼ í¬ì¸í°ë¥¼ ìì íì§ ìê³  , íì¼ì í¹ì  ì¥ìì 기ë¡.

     writev() ê·¸ë¼, iovec êµ¬ì¡°ì²´ê° ì´íì ê°ì´ ì ìëê³  ììµëë¤.

           struct iovec {
                   char   *iov_base;    /* ë² ì´ì¤ 주ì */
                   size_t  iov_len;     /* ê¸¸ì´ */
           };

     ê° iovec ìí¸ë¦¬ë, ì°ê¸°ë°ì´í°ê° ìë ë©ëª¨ë¦¬ì ë² ì´ì¤ 주ìì areaì 길ì´ë¥¼
     ì§ì í©ëë¤.  writev() (ì)ë, íì area ì 체를 ì°ê¸° ê·¸ë¦¬ê³ ë¡ë¶í° ë¤ìì
     ì§íë©ëë¤.

     ìí¬ ê¸°ë¥ì´ ìë ì¤ë¸ì í¸ììë, write() í d ì ê´ë ¨íë í¬ì¸í°ê° ì§ì íë ìì¹ìì
     ê°ìí©ëë¤.  lseek(2) (ì)를 ì°¸ì¡°í´ ì£¼ì¸ì.  write() (ì¼)ë¡ë¶í°
     ëìì¤ë©´(ì), í¬ì¸í°ë ì°ê¸°ë°ì´í¸ìë§í¼ ì§íë©ëë¤.

     ìí¬ ê¸°ë¥ì´ ìë ì¤ë¸ì í¸ììë, íì íì¬ ìì¹ë¡ë¶í° 기ë¡.  ì´ë¬í ì¤ë¸ì í¸ì
     ê´ë ¨íë í¬ì¸í°ì ê°ì 미ì ë리ìëë¤.

     ì´ë§¤ ì ì ê° ìí¼ ì ì ê° ìë ê²½ì°, write() (ì)ë, set-user-ID ë¹í¸ë¥¼ íì¼ë¡
     í´ë¦¬ì´ í©ëë¤.  ì´ê²ì ìí´, ìí¼ ì ì ê° ìì íë ê¸°ë¡ ê°ë¥í set-user-ID íì¼ì
     ãì¡ìë¤ãì ì ë, system security를 ëíí  ì ìê² ë©ëë¤.

     ìì¼ê³¼ ê°ì´, íë¡ì°(flow) 컨í¸ë¡¤ì ìí¥ì ë°ë ì¤ë¸ì í¸ë¡ ë¹ë¸ë¡í¹ I/O 를
     ì¬ì©íë©´(ì), write() (ì)ê³¼ writev() (ì)ë, ì구íë ê²ë³´ë¤ ì ì ë°ì´í¸ì를
     ì°ê¸°ì¼ì´ ììµëë¤.  ë°íê°ì 주ìí´, ê°ë¥í ê²½ì°ìë ì¤í¼ë ì´ìì ë머ì§ë¥¼
     ì¬ì°¨ ìíí´ ì£¼ì¸ì.

ë°íê°
     ì²ë¦¬ê° ì ìì ì¼ë¡ ìë£íë©´(ì), ì°ê¸°ë°ì´í¸ìê° ëë ¤ì£¼ì´ì§ëë¤.  ê·¸ë ì§ ìì
     ê²½ì°ë -1 ì´ ëë ¤ì£¼ì´ì ¸ ìë¬ë¥¼ ëíë´ê¸° ìí´ì(ë문ì) ê¸ë¡ë² ë³ì errno
     íì§ë§ ì¤ì ë©ëë¤.

ìë¬
     write(), writev(), pwrite() (ì)ë, ì´íì ê²½ì°ì ìë¬ê° ëì´, íì¼ í¬ì¸í°ë
     ë³ê²½ëì§ ìê³  ë¨ìµëë¤.

     [EBADF]            d íì§ë§, 기ë¡ì©ì¼ë¡ ì´ë¦° ì í¨í 기ì ìê° ìëëë¤.

     [EPIPE]            íë¡ì¸ì¤ì ìí ì½ê¸°ì©ì¼ë¡ ì´ë¦¬ì§ ìì íì´íì ì°ê¸°
                        ì´ì (ë²ì¨)ë¡ íìµëë¤.

     [EPIPE]            íµì  ìëì ìì¼ì ì ìíê³  ìì§ ìë íì SOCK_STREAM ì ìì¼ì
                        ì°ê¸° ì´ì (ë²ì¨)ë¡ íìµëë¤.

     [EFBIG]            íë¡ì¸ì¤ì íì¼ ì¬ì´ì¦ ì íì´ë ìµë íì¼ ì¬ì´ì¦ë¥¼ ëì íì¼ì
                        ì°ê¸° ì´ì (ë²ì¨)ë¡ íìµëë¤.

     [EFAULT]           iov ì ì¼ë¶, ëë íì¼ì ì°ê¸°ë°ì´í°ë, íë¡ì¸ì¤ì í ë¹í  ì
                        ììë address ê³µê°ì ë²ìì¸ë¥¼ ê°ë¦¬í¤ê³  ììµëë¤.

     [EINVAL]           d ì ê´ë ¨íë í¬ì¸í°ê° ë¶ê° ëì´ ììµëë¤.

     [ENOSPC]           íì¼ì í¬í¨í íì¼ ìì¤íì, 충ë¶í ì¤íì´ì¤ê° ë¨ì ìì§ ììµëë¤.

     [EDQUOT]           íì¼ì í¬í¨í íì¼ ìì¤íì ì ì ì ëì¤í¬ ë¸ë¡ í ë¹ëì´
                        ì°ì¬ì§ê³  ììµëë¤.

     [EIO]              íì¼ ìì¤íì ì½ê³  ì°ê¸°íê³  ìë ëìì ìì¶ë ¥ ìë¬ê°
                        ë°ìíìµëë¤.

     [EINTR]            기ë¡ì´ ìë£í기 ì ì ìê·¸ëì´ ë¼ì´ë¤ììµëë¤.

     [EAGAIN]           íì¼ì ë¹ë¸ë¡í¹ ìì¶ë ¥ì íê° ë¶ì ìíë¡, ê²ë¤ê°, 곧ë°ë¡
                        ë°ì´í°ë¥¼ ì°ê¸°ìíê° ìëëë¤.

     writev() (ì)ë, ì´íì ìë¬ë¥¼ ëë리ë ì¼ì´ ììµëë¤.

     [EDESTADDRREQ]     connect(2) (ì)를 ì¬ì©í´ 기ë¡ì² 주ì를 ì¤ì íë¤ UNIX
                        ëë©ì¸ ë°ì´í° ê·¸ë¨ ìì¼ì ì°ê¸°ê²½ì°ì, 기ë¡ì²ë¥¼ ì¬ì©í
                        ì ììµëë¤.

     [EINVAL]           iovcnt íì§ë§ 0 ì´íê° ëì´ ìëì§, UIO_MAXIOV ë³´ë¤ ,
                        커ì§ê³  ììµëë¤.

     [EINVAL]           iov ë°°ì´ iov_len ê°ì 1 ê°ê° ë¶ê° ëì´ ììµëë¤.

     [EINVAL]           iov ë°°ì´ iov_len ê°ì í©ê³ê°, 32 ë¹í¸ ì ì를 ì¤ë²íë¡ì°
                        íìµëë¤.

     [ENOBUFS]          ìì¼ì ì¨ë´ê³  ìì ëì mbuf ì íì ì°ì¬ì¡ìµëë¤.

     pwrite() í¸ì¶ì, ì´íì ìë¬ë¥¼ ëë리ë ì¼ì´ ììµëë¤.

     [EINVAL]           ì§ì í íì¼ ì¤íì(offset)ê° ì¬ë°ë¥´ì§ë ììµëë¤.

     [ESPIPE]           íì¼ ê¸°ì ìê°, íì´í, ìì¼, FIFO ì ê´ë ¨íê³  ììµëë¤.

ê´ë ¨ í목
     fcntl(2), lseek(2), open(2), pipe(2), select(2)

íì¤
     write() í¨ì í¸ì¶ì, ISO/IEC 9945-1:1990 (“POSIX.1”) ì ì¤ê±°íê³  ììµëë¤.
     writev() í¨ìì pwrite() í¨ìë,  2 ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.

ìì¬
     pwrite() í¨ì í¸ì¶ì, AT&T UNIX V. 4 ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.  writev() í¨ì
     í¸ì¶ì, 4.2BSD ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.  write() í¨ì í¸ì¶ì, Version 6 AT&T
     UNIX ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.