semctl

SEMCTL(2)       Ð ÑководÑÑво пÑогÑаммиÑÑа Linux       SEMCTL(2)



ÐÐЯ
       semctl - опеÑаÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑемаÑоÑами System V

ÐÐÐÐÐ
       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/sem.h>

       int semctl(int semid, int semnum, int cmd, ...);

ÐÐÐСÐÐÐÐ
       ÐÑзов semctl вÑполнÑÐµÑ Ð¾Ð¿ÐµÑаÑиÑ, опÑеделÑннÑÑ Ð²
       cmd, над набоÑом ÑемаÑоÑов System V, Ñказанном
       в semid, или над ÑемаÑоÑом Ñ Ð½Ð¾Ð¼ÐµÑом semnum из
       ÑÑого набоÑа (ÑемаÑоÑÑ Ð½ÑмеÑÑÑÑÑÑ, наÑÐ¸Ð½Ð°Ñ Ñ 0).

       ÐаннÑй вÑзов Ð¸Ð¼ÐµÐµÑ ÑÑи или ÑеÑÑÑе аÑгÑменÑа, в
       завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ cmd. ÐÑли аÑгÑменÑов
       ÑеÑÑÑе, Ñо ÑеÑвеÑÑÑй аÑгÑÐ¼ÐµÐ½Ñ arg Ð¸Ð¼ÐµÐµÑ Ñип union
       semun. РвÑзÑваÑÑей пÑогÑамме ÑÑо обÑединение
       должно бÑÑÑ Ð¾Ð¿Ñеделено ÑледÑÑÑим обÑазом:

           union semun {
               int              val;    /* знаÑение Ð´Ð»Ñ SETVAL */
               struct semid_ds *buf;    /* бÑÑÐµÑ Ð´Ð»Ñ IPC_STAT, IPC_SET */
               unsigned short  *array;  /* маÑÑив Ð´Ð»Ñ GETALL, SETALL */
               struct seminfo  *__buf;  /* бÑÑÐµÑ Ð´Ð»Ñ IPC_INFO
                                           (еÑÑÑ ÑолÑко в Linux) */
           };

       СÑÑÑкÑÑÑа даннÑÑ semid_ds опÑеделена в <sys/sem.h>
       ÑледÑÑÑим обÑазом:

           struct semid_ds {
               struct ipc_perm sem_perm;  /* Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¸ пÑава */
               time_t          sem_otime; /* вÑÐµÐ¼Ñ Ð¿Ð¾Ñледней опеÑаÑии semop */
               time_t          sem_ctime; /* вÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ */
               unsigned long  sem_nsems; /* кол-во ÑемаÑоÑов в набоÑе */
           };

       СÑÑÑкÑÑÑа ipc_perm опÑеделена ÑледÑÑÑим обÑазом
       (знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ ÑÑÑанавливаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
       IPC_SET):

           struct ipc_perm {
               key_t          __key; /* клÑÑ, пеÑедаваемÑй в semget(2) */
               uid_t          uid;   /* ÑÑÑекÑивнÑй UID владелÑÑа */
               gid_t          gid;   /* ÑÑÑекÑивнÑй GID владелÑÑа */
               uid_t          cuid;  /* ÑÑÑекÑивнÑй UID ÑоздаÑÐµÐ»Ñ */
               gid_t          cgid;  /* ÑÑÑекÑивнÑй GID ÑоздаÑÐµÐ»Ñ */
               unsigned short mode;  /* пÑава */
               unsigned short __seq; /* поÑÑдковÑй Ð½Ð¾Ð¼ÐµÑ */
           };

       ÐозможнÑе знаÑÐµÐ½Ð¸Ñ cmd:

       IPC_STAT  ÐопиÑÑÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
                 ÑдÑа, ÑвÑзанной Ñ semid, в ÑÑÑÑкÑÑÑÑ semid_ds,
                 ÑаÑположеннÑÑ Ð¿Ð¾ адÑеÑÑ arg.buf. ÐÑгÑменÑ
                 semnum игноÑиÑÑеÑÑÑ. ÐÑзÑваÑÑий пÑоÑеÑÑ
                 должен имеÑÑ Ð¿Ñава на ÑÑение набоÑа
                 ÑемаÑоÑов.

       IPC_SET   ÐапиÑÑÐ²Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¿Ð¾Ð»ÐµÐ¹
                 ÑÑÑÑкÑÑÑÑ semid_ds, на коÑоÑÑÑ ÑказÑÐ²Ð°ÐµÑ arg.buf,
                 в ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ ÑдÑа, ÑвÑзаннÑÑ Ñ ÑÑим
                 набоÑом ÑемаÑоÑов, Ñакже обновлÑÑ Ð¿Ñи
                 ÑÑом поле sem_ctime. ÐбновлÑÑÑÑÑ ÑледÑÑÑие
                 Ð¿Ð¾Ð»Ñ ÑÑÑÑкÑÑÑÑ: sem_perm.uid, sem_perm.gid и
                 (младÑие 9 знаÑаÑÐ¸Ñ Ð±Ð¸Ñов) sem_perm.mode. Ð‐
                 ÑÑекÑивнÑй UID вÑзÑваÑÑего пÑоÑеÑÑа
                 должен ÑовпадаÑÑ Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑом
                 владелÑÑа (sem_perm.uid) или ÑоздаÑелÑ
                 (sem_perm.cuid) набоÑа ÑемаÑоÑов, или
                 вÑзÑваÑÑий должен имеÑÑ ÑаÑÑиÑеннÑе
                 пÑава. ÐÑгÑÐ¼ÐµÐ½Ñ semnum игноÑиÑÑеÑÑÑ.

       IPC_RMID  Ðемедленно ÑдалÑÐµÑ Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов,
                 пÑобÑÐ¶Ð´Ð°Ñ Ð²Ñе пÑоÑеÑÑÑ,
                 заблокиÑованнÑе в вÑзове semop(2) (пÑи
                 ÑÑом возвÑаÑаеÑÑÑ ÑообÑение об оÑибке,
                 а errno пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение EIDRM). Ð‐
                 ÑÑекÑивнÑй иденÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ
                 вÑзÑваÑÑего пÑоÑеÑÑа должен ÑовпадаÑÑ
                 Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑом ÑоздаÑÐµÐ»Ñ Ð¸Ð»Ð¸
                 владелÑÑа набоÑа ÑемаÑоÑов, или
                 вÑзÑваÑÑий должен имеÑÑ ÑаÑÑиÑеннÑе
                 пÑава. ÐÑгÑÐ¼ÐµÐ½Ñ semnum игноÑиÑÑеÑÑÑ.

       IPC_INFO (еÑÑÑ ÑолÑко в Linux)
                 ÐозвÑаÑÐ°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¸ инÑоÑмаÑÐ¸Ñ Ð¾
                 ÑиÑÑемнÑÑ Ð¾Ð³ÑаниÑениÑÑ ÑемаÑоÑов в
                 ÑÑÑÑкÑÑÑе, Ñказанной в arg.__buf. ÐаннаÑ
                 ÑÑÑÑкÑÑÑа Ð¸Ð¼ÐµÐµÑ Ñип seminfo, коÑоÑÑй
                 опÑеделÑн в <sys/sem.h>, еÑли опÑеделÑн
                 макÑÐ¾Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв _GNU_SOURCE:

                     struct  seminfo {
                         int semmap;  /* колиÑеÑÑво запиÑей в каÑÑе
                                         ÑемаÑоÑов; не иÑполÑзÑеÑÑÑ Ð² ÑдÑе */
                         int semmni;  /* макÑималÑное колиÑеÑÑво набоÑов
                                         ÑемаÑоÑов */
                         int semmns;  /* макÑималÑное колиÑеÑÑво ÑемаÑоÑов во
                                          вÑÐµÑ Ð½Ð°Ð±Ð¾ÑÐ°Ñ ÑемаÑоÑов */
                         int semmnu;  /* макÑималÑное колиÑеÑÑво ÑÑÑÑкÑÑÑ undo
                                         в ÑиÑÑеме; не иÑполÑзÑеÑÑÑ Ð² ÑдÑе */
                         int semmsl;  /* макÑималÑное колиÑеÑÑво ÑемаÑоÑов в
                                         набоÑе */
                         int semopm;  /* макÑималÑное колиÑеÑÑво опеÑаÑÐ¸Ñ Ð´Ð»Ñ
                                         semop(2) */
                         int semume;  /* макÑималÑное колиÑеÑÑво запиÑей undo на
                                         пÑоÑеÑÑ; не иÑполÑзÑеÑÑÑ Ð² ÑдÑе */
                         int semusz;  /* ÑÐ°Ð·Ð¼ÐµÑ struct sem_undo */
                         int semvmx;  /* макÑималÑное знаÑение ÑемаÑоÑа */
                         int semaem;  /* макÑималÑное знаÑение, коÑоÑое можеÑ
                                         бÑÑÑ Ð·Ð°Ð¿Ð¸Ñано Ð´Ð»Ñ ÑегÑлиÑованиÑ
                                         ÑемаÑоÑа (SEM_UNDO) */
                     };

                 ÐнаÑÐµÐ½Ð¸Ñ semmsl, semmns, semopm и semmni можно
                 измениÑÑ ÑеÑез /proc/sys/kernel/sem;
                 подÑобноÑÑи в proc(5).

       SEM_INFO (еÑÑÑ ÑолÑко в Linux)
                 ÐозвÑаÑÐ°ÐµÑ ÑÑÑÑкÑÑÑÑ seminfo, ÑодеÑжаÑÑÑ ÑакÑÑ
                 же инÑоÑмаÑÐ¸Ñ ÑÑо и Ð´Ð»Ñ IPC_INFO, за
                 иÑклÑÑением Ñого, ÑÑо ÑледÑÑÑие полÑ
                 ÑодеÑÐ¶Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑиÑÑемнÑÑ ÑеÑÑÑÑаÑ,
                 поÑÑеблÑемÑÑ ÑемаÑоÑами: в поле semusz
                 возвÑаÑаеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво набоÑов
                 ÑемаÑоÑов, ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð² ÑиÑÑеме; в поле
                 semaem возвÑаÑаеÑÑÑ Ð¾Ð±Ñее колиÑеÑÑво
                 ÑемаÑоÑов во вÑÐµÑ Ð½Ð°Ð±Ð¾ÑÐ°Ñ ÑемаÑоÑов в
                 ÑиÑÑеме.

       SEM_STAT (еÑÑÑ ÑолÑко в Linux)
                 ÐозвÑаÑÐ°ÐµÑ ÑÑÑÑкÑÑÑÑ semid_ds как Ð´Ð»Ñ IPC_STAT.
                 Ðднако аÑгÑÐ¼ÐµÐ½Ñ semid ÑодеÑÐ¶Ð¸Ñ Ð½Ðµ
                 иденÑиÑикаÑÐ¾Ñ ÑемаÑоÑа, а Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð¾
                 внÑÑÑеннем маÑÑиве ÑдÑа, коÑоÑÑй ÑÑаниÑ
                 инÑоÑмаÑÐ¸Ñ Ð¾ вÑÐµÑ Ð½Ð°Ð±Ð¾ÑÐ°Ñ ÑемаÑоÑов в
                 ÑиÑÑеме.

       GETALL    ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение semval (Ñ.е. ÑекÑÑее
                 знаÑение) вÑÐµÑ ÑемаÑоÑов в набоÑе в
                 arg.array. ÐÑгÑÐ¼ÐµÐ½Ñ semnum игноÑиÑÑеÑÑÑ.
                 ÐÑзÑваÑÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ Ð½ÑÐ¶Ð½Ñ Ð¿Ñава на
                 ÑÑение набоÑа ÑемаÑоÑов.

       GETNCNT   ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение semncnt Ð´Ð»Ñ semnum-Ñого
                 ÑемаÑоÑа (Ñ.е., ÑиÑло пÑоÑеÑÑов,
                 ожидаÑÑÐ¸Ñ ÑвелиÑÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ semval в
                 semnum-ом ÑемаÑоÑе набоÑа). ÐÑзÑваÑÑемÑ
                 пÑоÑеÑÑÑ Ð½ÑÐ¶Ð½Ñ Ð¿Ñава на ÑÑение набоÑа
                 ÑемаÑоÑов.

       GETPID    ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение sempid Ð´Ð»Ñ semnum-Ñого
                 ÑемаÑоÑа набоÑа. ÐÑо PID пÑоÑеÑÑа, коÑоÑÑй
                 поÑледним вÑполнÑл опеÑаÑÐ¸Ñ Ñ ÑÑим
                 ÑемаÑоÑом (но ÑмоÑÑиÑе ÐÐÐÐЧÐÐÐЯ).
                 ÐÑзÑваÑÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ Ð½ÑÐ¶Ð½Ñ Ð¿Ñава на
                 ÑÑение набоÑа ÑемаÑоÑов.

       GETVAL    ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение semval Ð´Ð»Ñ semnum-Ñого
                 ÑемаÑоÑа набоÑа. ÐÑзÑваÑÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ
                 нÑÐ¶Ð½Ñ Ð¿Ñава на ÑÑение набоÑа
                 ÑемаÑоÑов.

       GETZCNT   ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение semzcnt Ð´Ð»Ñ semnum-Ñого
                 ÑемаÑоÑа (Ñ.е., колиÑеÑÑво пÑоÑеÑÑов,
                 ожидаÑÑиÑ, когда знаÑение semval
                 semnum-Ñого ÑемаÑоÑа набоÑа ÑÑÐ°Ð½ÐµÑ ÑавнÑм
                 0). ÐÑзÑваÑÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ Ð½ÑÐ¶Ð½Ñ Ð¿Ñава на
                 ÑÑение набоÑа ÑемаÑоÑов.

       SETALL    УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение semval вÑеÑ
                 ÑемаÑоÑов набоÑа, иÑполÑзÑÑ arg.array и
                 изменÑÑ Ñакже поле sem_ctime ÑÑÑÑкÑÑÑÑ
                 semid_ds, ÑвÑзанной Ñ Ð½Ð°Ð±Ð¾Ñом. ÐапиÑи undo
                 (Ñм. semop(2)) оÑиÑаÑÑÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÑннÑÑ
                 ÑемаÑоÑов во вÑÐµÑ Ð¿ÑоÑеÑÑаÑ. ÐÑли
                 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений ÑемаÑоÑов
                 пÑиводÑÑ Ðº оÑмене блокиÑовки в
                 вÑзове semop(2) дÑÑÐ³Ð¸Ñ Ð¿ÑоÑеÑÑов, Ñо ÑÑи
                 пÑоÑеÑÑÑ Ð¿ÑобÑждаÑÑÑÑ. ÐÑгÑÐ¼ÐµÐ½Ñ semnum
                 игноÑиÑÑеÑÑÑ. ÐÑзÑваÑÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ Ð½ÑжнÑ
                 пÑава на запиÑÑ Ð² Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов.

       SETVAL    УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение semval ÑавнÑм
                 arg.val Ð´Ð»Ñ semnum-го ÑемаÑоÑа набоÑа,
                 изменÑÑ Ñакже поле sem_ctime в ÑÑÑÑкÑÑÑе
                 semid_ds, ÑвÑзанной Ñ ÑÑим набоÑом. ÐапиÑи
                 undo оÑиÑаÑÑÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÑннÑÑ ÑемаÑоÑов
                 во вÑÐµÑ Ð¿ÑоÑеÑÑаÑ. ÐÑли изменениÑ
                 знаÑений ÑемаÑоÑов пÑиводÑÑ Ðº оÑмене
                 блокиÑовки в вÑзове semop(2) дÑÑгиÑ
                 пÑоÑеÑÑов, Ñо ÑÑи пÑоÑеÑÑÑ Ð¿ÑобÑждаÑÑÑÑ.
                 ÐÑгÑÐ¼ÐµÐ½Ñ semnum игноÑиÑÑеÑÑÑ. ÐÑзÑваÑÑемÑ
                 пÑоÑеÑÑÑ Ð½ÑÐ¶Ð½Ñ Ð¿Ñава на запиÑÑ Ð² набоÑ
                 ÑемаÑоÑов.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи оÑибке semctl() возвÑаÑÐ°ÐµÑ -1, а пеÑеменной
       errno пÑиÑваиваеÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð¾Ñибки.

       ÐÑи ÑÑпеÑном вÑполнении ÑиÑÑемнÑй вÑзов
       возвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑное знаÑение,
       завиÑÑÑее Ð¾Ñ cmd:

       GETNCNT   знаÑение semncnt.

       GETPID    знаÑение sempid.

       GETVAL    знаÑение semval.

       GETZCNT   знаÑение semzcnt.

       IPC_INFO  Ñамое болÑÑое знаÑение индекÑа,
                 иÑполÑзованного в запиÑи
                 внÑÑÑеннего маÑÑива ÑдÑа, ÑодеÑжаÑего
                 инÑоÑмаÑÐ¸Ñ Ð¾ вÑÐµÑ Ð½Ð°Ð±Ð¾ÑÐ°Ñ ÑемаÑоÑов (ÑÑа
                 инÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²
                 повÑоÑÑÑÑиÑÑÑ Ð¾Ð¿ÐµÑаÑиÑÑ SEM_STAT длÑ
                 полÑÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о вÑÐµÑ Ð½Ð°Ð±Ð¾ÑаÑ
                 ÑемаÑоÑов в ÑиÑÑеме).

       SEM_INFO  как Ð´Ð»Ñ IPC_INFO.

       SEM_STAT  иденÑиÑикаÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñа ÑемаÑоÑов,
                 Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾ÑоÑого Ñказан в semid.

       ÐÐ»Ñ Ð²ÑÐµÑ Ð¾ÑÑалÑнÑÑ Ð·Ð½Ð°Ñений cmd возвÑаÑаеÑÑÑ 0.

ÐШÐÐÐÐ
       ÐÑи оÑибке errno пÑиÑваиваÑÑÑÑ ÑледÑÑÑие
       знаÑениÑ:

       EACCES ÐÑгÑÐ¼ÐµÐ½Ñ cmd Ñавен GETALL, GETPID, GETVAL, GETNCNT,
              GETZCNT, IPC_STAT, SEM_STAT, SETALL или SETVAL и
              вÑзÑваÑÑий пÑоÑеÑÑ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑаÑоÑно
              пÑав на Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов и не имееÑ
              мандаÑа CAP_IPC_OWNER в пÑоÑÑÑанÑÑве имÑн
              полÑзоваÑелÑ, коÑоÑÑй ÑпÑавлÑÐµÑ ÐµÐ³Ð¾
              пÑоÑÑÑанÑÑвом имÑн IPC.

       EFAULT ÐдÑеÑ, ÑказаннÑй в arg.buf или arg.array,
              недоÑÑÑпен.

       EIDRM  ÐÐ°Ð±Ð¾Ñ ÑемаÑоÑов бÑл ÑдалÑн.

       EINVAL ÐевеÑное знаÑение cmd или semid. Ðли: пÑи
              опеÑаÑии SEM_STAT знаÑение индекÑа,
              Ñказанное в semid, ÑÑÑлаеÑÑÑ Ð½Ð° меÑÑо в
              маÑÑиве, коÑоÑое в даннÑе Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ
              иÑполÑзÑеÑÑÑ.

       EPERM  ÐÑгÑÐ¼ÐµÐ½Ñ cmd Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение IPC_SET или
              IPC_RMID, но ÑÑÑекÑивнÑй иденÑиÑикаÑоÑ
              полÑзоваÑÐµÐ»Ñ Ð²ÑзÑваÑÑего пÑоÑеÑÑа не
              ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ ID ÑоздаÑÐµÐ»Ñ (Ñказанного в
              sem_perm.cuid) или Ñ ID владелÑÑа (Ñказанного
              в sem_perm.uid) набоÑа ÑемаÑоÑов, и пÑоÑеÑÑ Ð½Ðµ
              Ð¸Ð¼ÐµÐµÑ Ð¼Ð°Ð½Ð´Ð°Ñа CAP_SYS_ADMIN.

       ERANGE ÐÑгÑÐ¼ÐµÐ½Ñ cmd Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение SETALL или SETVAL
              и знаÑение, пÑиÑваиваемое semval (длÑ
              какого-Ñо ÑемаÑоÑа в набоÑе), менÑÑе
              нÑÐ»Ñ Ð¸Ð»Ð¸ болÑÑе, Ñем огÑаниÑение
              ÑеализаÑии SEMVMX.

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       POSIX.1-2001, POSIX.1-2008, SVr4.

       Ð POSIX.1 Ñказано, ÑÑо поле sem_nsems ÑÑÑÑкÑÑÑÑ semid_ds
       Ð¸Ð¼ÐµÐµÑ Ñип unsigned short, и ÑÑо Ñак на в
       болÑÑинÑÑве дÑÑÐ³Ð¸Ñ ÑиÑÑем. ÐÑо бÑло и в Linux 2.2 и
       более ÑÐ°Ð½Ð½Ð¸Ñ Ð²ÐµÑÑиÑÑ, но наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4 ÑÑо
       поле Ð¸Ð¼ÐµÐµÑ Ñип unsigned long.

ÐÐÐÐЧÐÐÐЯ
       ÐклÑÑение Ñайлов <sys/types.h> и <sys/ipc.h> не
       ÑÑебÑеÑÑÑ Ð² Linux или лÑбÑÑ Ð²ÐµÑÑий POSIX. Ðднако,
       некоÑоÑÑе ÑÑаÑÑе ÑеализаÑии ÑÑебÑÑÑ Ð²ÐºÐ»ÑÑениÑ
       даннÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑÑ Ñайлов, и ÑÑо Ñакже
       ÑÑебÑеÑÑÑ Ð¿Ð¾ SVID. РпÑиложениÑÑ, коÑоÑÑе нÑжно
       пеÑенеÑÑи на Ñакие ÑÑаÑÑе ÑиÑÑемÑ, можеÑ
       поÑÑебоваÑÑÑÑ Ð²ÐºÐ»ÑÑиÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑе
       ÑайлÑ.

       ÐпеÑаÑии IPC_INFO, SEM_STAT и SEM_INFO иÑполÑзÑÑÑÑÑ
       пÑогÑаммой ipcs(1) Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о
       вÑделеннÑÑ ÑеÑÑÑÑаÑ. РбÑдÑÑем Ð´Ð»Ñ ÑÑого можеÑ
       бÑÑÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвован инÑеÑÑÐµÐ¹Ñ Ñайловой ÑиÑÑемÑ
       /proc.

       Ð Linux 2.2 ÑазлиÑнÑе Ð¿Ð¾Ð»Ñ struct semid_ds имели Ñип
       short. Ð Linux 2.4 Ñип бÑл изменÑн на long. ÐлÑ
       задейÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑеимÑÑеÑÑв ÑÑого изменениÑ
       необÑодима пеÑекомпилÑÑÐ¸Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ñ
       glibc-2.1.91 или более поздней веÑÑией (ÑдÑо
       ÑазлиÑÐ°ÐµÑ ÑÑаÑÑе и новÑе вÑÐ·Ð¾Ð²Ñ Ð¿Ð¾ ÑÐ»Ð°Ð³Ñ IPC_64
       в аÑгÑменÑе cmd).

       РнекоÑоÑÑÑ ÑÐ°Ð½Ð½Ð¸Ñ Ð²ÐµÑÑиÑÑ glibc обÑединение
       semun опÑеделÑлоÑÑ Ð² <sys/sem.h>, но в POSIX.1
       ÑÑебовалоÑÑ, ÑÑÐ¾Ð±Ñ ÑÑо обÑединение опÑеделÑл
       вÑзÑваÑÑий. РвеÑÑиÑÑ glibc, в коÑоÑÑÑ ÑÑо
       обÑединение не опÑеделено, в <sys/sem.h>
       опÑеделÑн макÑÐ¾Ñ _SEM_SEMUN_UNDEFINED.

       Ðа ÑабоÑÑ Ð½Ð°Ð±Ð¾Ñов ÑемаÑоÑов и вÑзова semctl()
       влиÑÐµÑ ÑиÑÑемное огÑаниÑение:

       SEMVMX ÐакÑималÑное знаÑение semval: завиÑÐ¸Ñ Ð¾Ñ
              ÑеализаÑии (32767).

       ÐÐ»Ñ Ð»ÑÑÑей пеÑеноÑимоÑÑи пÑогÑамм желаÑелÑно
       вÑегда вÑзÑваÑÑ semctl() c ÑеÑÑÑÑÐ¼Ñ Ð°ÑгÑменÑам.

   ÐнаÑение sempid
       Ð POSIX.1 знаÑение sempid опÑеделено как «ID
       пÑоÑеÑÑа поÑледней опеÑаÑии» над ÑемаÑоÑом,
       и Ñвно оÑмеÑено, ÑÑо ÑÑо знаÑение
       ÑÑÑанавливаеÑÑÑ ÑÑпеÑнÑм вÑзовом semop(2),
       подÑазÑмеваÑ, ÑÑо болÑÑе никÑо не изменÑеÑ
       sempid.

       Ðдни ÑеализаÑии ÑледÑÑÑ ÑÑебованиÑм,
       ÑказаннÑм в POSIX.1, а дÑÑгие Ð½ÐµÑ (вина здеÑÑ,
       веÑоÑÑно, Ð»ÐµÐ¶Ð¸Ñ Ð½Ð° POSIX.1, Ñак как ÐµÐ¼Ñ Ð½Ðµ
       ÑдаÑÑÑÑ Ð¾ÑваÑиÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ вÑÐµÑ ÑÑÑеÑÑвÑÑÑиÑ
       ÑеализаÑий). Также, ÑазнÑе ÑеализаÑии
       обновлÑÑÑ sempid дÑÑгими опеÑаÑиÑми,
       обновлÑÑÑими знаÑение ÑемаÑоÑа: SETVAL и SETALL,
       а Ñакже изменение ÑемаÑоÑа, вÑполнÑемое
       пÑи завеÑÑении пÑоÑеÑÑа как ÑледÑÑвие
       иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлага SEM_UNDO (ÑмоÑÑиÑе semop(2)).

       Linux Ñакже обновлÑÐµÑ sempid пÑи опеÑаÑиÑÑ SETVAL и
       ÑегÑлиÑовки ÑемаÑоÑа. Ðднако,
       непоÑледоваÑелÑно, Ñанние веÑÑии Linux по 4.5
       вклÑÑиÑелÑно не обновлÑли sempid пÑи опеÑаÑиÑÑ
       SETALL. ÐÑо бÑло иÑпÑавлено в Linux 4.6.

СÐÐТРÐТРТÐÐÐÐ
       ipc(2), semget(2), semop(2), capabilities(7), sem_overview(7), svipc(7)



Linux                             2016-03-15                         SEMCTL(2)