semctl

ëªì¹
     semctl — semaphore ì§í©ì ëí ì¡°ìì ì ì´íë¤

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

ìì
     <sys/types.h> <sys/ipc.h> <sys/sem.h> int semctl(int semid, int semnum,
     int cmd, ...)

í´ì¤
     semctl() (ì)ë, cmd íì§ë§ ê°ë¦¬í¤ë ì¡°ìì semid ê·¸ë¦¬ê³  ëíëë semaphore
     ì§í©ì ëí´ì ì¤íí©ëë¤.  ì´ë ê°ì cmd ì ëí´ìë, 4 ë²ì§¸ì ì¸ì union semun arg
     íì§ë§ íìí©ëë¤.  arg íë¼ë¯¸í°ë¥¼ ì¬ì©íë ëªë ¹ì ê²½ì°, union semun (ì)ë
     ë¤ìê³¼ ê°ì´ ì ìë©ëë¤.

     union semun {
             int     val;            /*  SETVAL ì©ì ê° */
             struct  semid_ds *buf;  /*  IPC_STAT ë° IPC_SET ì©ì ë²í¼ */
             u_short *array;         /*  GETALL ë° SETALL ì©ì ë°°ì´ */
     };

     ëªë ¹ì ë¤ìê³¼ ê°ì´ ì¤íë©ëë¤.

     IPC_STAT     semaphore ì§í©ì struct semid_ds (ì)를 ì·¨ëí´, arg.buf íì§ë§
                  ê°ë¦¬í¤ë ë©ëª¨ë¦¬ì ë³´ì¡´í©ëë¤.

     IPC_SET      semaphore ì§í©ì struct semid_ds ì ë©¤ë² sem_perm.uid,
                  sem_perm.gid ë° sem_perm.mode (ì)를, arg.buf íì§ë§ ê°ë¦¬í¤ë
                  구조체ì 멤ë²ì ì¼ì¹íëë¡(ë¯ì´) ë³ê²½í©ëë¤.  í¸ì¶ìíë¡ì¸ì¤ì
                  ì¤í¨ ì ì  ID ë, sem_perm.uid ëë sem_perm.cuid ì ì´ë
                  쪽ì¼ê¹íê³  ì¼ì¹í  íìê° ìëì§, ëë ìí¼ ì ì  í¹ê¶ì ê°ì§ê³  ìì
                  íìê° ììµëë¤.

     IPC_RMID     semaphore ì§í©ì ì¦ì ìì¤íì¼ë¡ë¶í° ìì í©ëë¤.  í¸ì¶ìíë¡ì¸ì¤ì
                  ì¤í¨ ì ì  ID ê° semaphore ì§í©ì sem_perm.uid ëë
                  sem_perm.cuid (ì)ê³¼ ëì¼íì§, ëë íë¡ì¸ì¤ê° ìí¼ ì ì  í¹ê¶ì
                  ê°ì§ê³  ìì íìê° ììµëë¤.

     GETVAL       semaphore ë²í¸ semnum ì ê°ì ëë ¤ì¤ëë¤.

     SETVAL       semaphore ë²í¸ semnum ì ê°ì arg.val (ì¼)ë¡ ì¤ì í©ëë¤.

     GETPID       semaphore ë²í¸ semnum ì ë¶ì´ ì¡°ìì ì¤íí ë§ì§ë§ íë¡ì¸ì¤ì
                  íë¡ì¸ì¤ ID 를 ëë ¤ì¤ëë¤.

     GETNCNT      semaphore ë²í¸ semnum ì ê°ì´ íì¬ì ê°ë³´ë¤ 커ì§ë ê²ì
                  기ë¤ë¦¬ê³  ìë íë¡ì¸ì¤ì ì를 ëë ¤ì¤ëë¤.

     GETZCNT      semaphore ë²í¸ semnum ì ê°ì´ 0 ì´ ëë ê²ì 기ë¤ë¦¬ê³  ìë
                  íë¡ì¸ì¤ì ì를 ëë ¤ì¤ëë¤.

     GETALL       ì§í©ë´ì ëª¨ë  semaphoreì ê°ì arg.array íì§ë§ ê°ë¦¬í¤ë
                  ë°°ì´ë´ì ì·¨ëí©ëë¤.

     SETALL       ì§í©ë´ì ëª¨ë  semaphoreì ê°ì arg.array íì§ë§ ê°ë¦¬í¤ë
                  ë°°ì´ë´ì ê°ì¼ë¡ ì¤ì í©ëë¤.

     struct semid_ds (ì)ë ë¤ìê³¼ ê°ì´ ì ìë©ëë¤.

     struct semid_ds {
             struct  ipc_perm sem_perm;      /* ì¡°ì í¼ë¯¸ì 구조체 */
             struct  sem *sem_base;  /* ì§í©ë´ì ìµì´ì semaphoreìì í¬ì¸í° */
             u_short sem_nsems;      /* ì§í©ë´ì semaphoreì ì */
             time_t  sem_otime;      /* ë§ì§ë§ ì¡°ì ìê° */
             long    sem_pad1;       /* SVABI/386 ì 밤과 ì´ê²ì´ íì */
             time_t  sem_ctime;      /* ë§ì§ë§ ë³ê²½ ìê°
                                      * 1970/01/01 00:00:00 GMT
                                      * (ì¼)ë¡ë¶í°ì ì´ë¨ìì 경과ìê°
                                      */
             long    sem_pad2;       /* SVABI/386 ì 밤과 ì´ê²ì´ íì */
             long    sem_pad3[4];    /* SVABI/386 ì 밤과 ì´ê²ì´ íì */
     };

ë°íê°
     ì²ë¦¬ê° ì ìì ì¼ë¡ ìë£íë©´(ì), cmd íì§ë§ GETVAL, GETPID, GETNCNT, GETZCNT
     ì ì´ë¤ ê²ì¸ê°ì¼ ë, semctl() (ì)ë ëìíë ê°ì ëë ¤ì¤ëë¤. ê·¸ë ì§ ìì ê²½ì°ë 0
     ì ëë ¤ì¤ëë¤.  ì²ë¦¬ì ì¤í¨íì ê²½ì°ë,-1 ì ëë ¤ì£¼ì´, ìë¬ë¥¼ ëíë´ê¸°
     ìí´ì(ë문ì) errno (ì)를 ì¤ì í©ëë¤.

ìë¬
     semctl() (ì)ë ë¤ìì ê²½ì°ì ì²ë¦¬ì ì¤í¨í©ëë¤.

     [EINVAL]           semid ì ëìíë semaphore ì§í©ì´ ììµëë¤.

     [EINVAL]           semnum íì§ë§, ì§ì ì semaphore ì§í©ì ëí´ì ì í¨í
                        semaphoreì ë²ìë´ì ììµëë¤.

     [EPERM]            í¸ì¶ìíë¡ì¸ì¤ì ì¤í¨ ì ì  ID ê°, semaphore ì§í©ì ìì ì ëë
                        ìì±ìì ì ì  ID ì ì¼ì¹íì§ ììµëë¤.

     [EACCES]           ì¡°ìê³¼ semaphore ì§í©ì 모ëì ì¬ì´ì ë¶ì¼ì¹ê° ìì기
                        ë문ì í¼ë¯¸ìì´ ê±°ë¶ëììµëë¤.

ê´ë ¨ í목
     semget(2), semop(2)