flock

ëªì¹
     flock — ì´ë¦° íì¼ìì 문ìí ë½ì ì ì© ëë ì ê±°íë¤

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

ìì
     <sys/file.h> #define   LOCK_SH        0x01      /* ê³µì  íì¼ ë½ */
     #define   LOCK_EX        0x02      /* ë°°íì  íì¼ ë½ */
     #define   LOCK_NB        0x04      /* ì ê¸ ë ë¸ë¡ íì§ ìëë¤ */
     #define   LOCK_UN        0x08      /* íì¼ì ì¸ë¡í¬ íë¤ */
     int flock(int fd, int operation)

í´ì¤
     flock() (ì)ë, íì¼ ê¸°ì ì fd ì ëìíë íì¼ìì 문ìí ë½ì ì ì© ëë ì ê±°í©ëë¤.
     ë½ì ì ì©íë ¤ë©´ , íë¼ë¯¸í°ì operation ì LOCK_SH ëë LOCK_EX ì
     ì´ë쪽ì´ë ê³¼ íìíë©´ LOCK_NB (ì)를 ëí´ ì§ì í©ëë¤.  기존ì ë½ì ì¸ë¡í¬ íë
     ê²½ì°ë operation (ì)를 LOCK_UN (ì¼)ë¡ í´ ì£¼ì¸ì.

     문ìí ë½ì, íëíë íë¡ì¸ì¤ê°ììì ì¼ê´í íì¼ ì¡°ìì ê°ë¥íê² í©ëë¤ë§, íì¼ì
     ì¼ê´ì±ì íë¡íìíë¤ ë¬¼ê±´ì´ ìëëë¤ (ì¦, íë¡ì¸ì¤ë 문ìí ë½ì ì¬ì©íì§ ìê³  íì¼ì
     ì¡ì¸ì¤ í  ì ìì¼ë¯ë¡, ê·¸ ê²°ê³¼ ì¼ê´ì±ì´ ìì´ì§ ê°ë¥ì±ì´ ììµëë¤).

     ë½ ë©ì¹´ëì¦ì ê³µì  ë½ê³¼ ë°°íì  ë½ì´ë¼ê³  íë 2 ê°ì íìì ë½ì ì ê³µí©ëë¤.
     ì¸ì ë¼ë ë³µìì ê³µì  ë½ì 1 ê°ì íì¼ì ì ì©í  ì ììµëë¤. ê·¸ë¬ë, ëìì 1 ê°ì
     íì¼ì ë³µìì ë°°íì  ë½, ëë ê³µì  ë½ê³¼ ë°°íì  ë½ì ì쪽 모ë를 ì ì©í  ì
     ììµëë¤.

     ì ì í ë½ì íìì ì§ì íë ê²ë§ì¼ë¡, ê³µì  ë½ì ë°°íì  ë½ì ìê·¸ë ì´ë í  ì ìì´
     ë°°íì  ë½ì ê³µì  ë½ì ë¤ì´ ê·¸ë ì´ë í  ì ììµëë¤.  ê·¸ ê²°ê³¼ì ì¼ë¡ ì ì ë½ì
     í´ë°©ëì´ ìë¡ì´ ë½ì´ ì ì©ë©ëë¤ (ë¤ë¥¸ íë¡ì¸ì¤ê° ë½ì ì·¨ëí´ í´ë°©í íì¼ì§ë
     모ë¦ëë¤).

     ì´ë¯¸ ë½ ëê³  ìë ì¤ë¸ì í¸ì ëí´ ë½ì ì구íë©´(ì), ë½ì íëí  ì ìì ëê¹ì§
     í¸ì¶ì¸¡ì ë¸ë¡ ë©ëë¤. ë¤ë§ LOCK_NB íì§ë§ operation ì í¬í¨ëë ê²½ì°ë ë¸ë¡
     ëì§ ììµëë¤. ëì ì í¸ì¶ì´ ì¤í¨í´, ìë¬ EWOULDBLOCK íì§ë§ ëë ¤ì£¼ì´ì§ëë¤.

주
     ë½ì íì¼ì ê±¸ì¹  ì ìë ê²ì´ë©°, íì¼ ê¸°ì ìê° ê±¸ì¹  ì ìë ê²ì´ ìëëë¤.  ì¦,
     dup(2) ëë fork(2) ì ìí´ ë³µì ë íì¼ ê¸°ì ìë, ë½ì ë³µìì ì¸ì¤í´ì¤ë ëì§ ìê³
     , 1 ê°ì ë½ìì ë³µìì ì°¸ì¡°ê° ë©ëë¤. ì´ë íì¼ì ëí ë½ì ë³´ê´ ì ì§íê³  ìë
     íë¡ì¸ì¤ê° í¬í¬ í´, child processê° ëªìì ì¼ë¡ ê·¸ íì¼ì ì¸ë¡í¬ íë ê²½ì°,
     parent processë ê·¸ ë½ì ììµëë¤.

     ë½ì 기ë¤ë ¤ ë¸ë¡ íê³  ìë íë¡ì¸ì¤ë ìê·¸ëë¡ ì¼ì¼ì¼ì§ì§ë 모ë¦ëë¤.

ë°íê°
     The flock() function returns the value 0 if successful; otherwise the
     value -1 is returned and the global variable errno is set to indicate the
     error.

ìë¬
     flock() í¸ì¶ì ë¤ìì ê²½ì°ì ì¤í¨í©ëë¤:

     [EWOULDBLOCK]      íì¼ì ë²ì¨ LOCK_NB ìµìì´ ì§ì ë ìíë¡ ë½ ëê³  ììµëë¤.

     [EBADF]            ì¸ì fd íì§ë§ 무í¨ì¸ 기ì ì를 ê°ë¦¬í¤ê³  ììµëë¤.

     [EINVAL]           ì¸ì fd íì§ë§ íì¼ ì´ì¸ì ì¤ë¸ì í¸ë¥¼ 참조íê³  ììµëë¤.

     [EOPNOTSUPP]       ì¸ì fd íì§ë§ íì¼ì ë½ì ìí¬í¸íì§ ìë ì¤ë¸ì í¸ë¥¼
                        참조íê³  ììµëë¤.

ê´ë ¨ í목
     close(2), dup(2), execve(2), fork(2), open(2)

ìì¬
     flock() í¨ìë 4.2BSD ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.