semget

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



ÐÐЯ
       semget - ÑÑиÑÑÐ²Ð°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñа
       ÑемаÑоÑов System V

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

       int semget(key_t key, int nsems, int semflg);

ÐÐÐСÐÐÐÐ
       СиÑÑемнÑй вÑзов semget() возвÑаÑаеÑ
       иденÑиÑикаÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñа ÑемаÑоÑов System V,
       ÑвÑзаннÑй Ñ Ð°ÑгÑменÑом key. ÐÑли знаÑение key
       Ñавно IPC_PRIVATE или Ñ ÐºÐ»ÑÑом key не ÑвÑзано ни
       одного ÑÑÑеÑÑвÑÑÑего набоÑа ÑемаÑоÑа, а в semflg
       задано IPC_CREAT, ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ñй Ð½Ð°Ð±Ð¾Ñ Ð¸Ð· nsems
       ÑемаÑоÑов.

       ÐÑли в semflg одновÑеменно ÑÐºÐ°Ð·Ð°Ð½Ñ IPC_CREAT и
       IPC_EXCL и Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов Ð´Ð»Ñ key Ñже ÑÑÑеÑÑвÑеÑ,
       Ñо semget() завеÑÑаеÑÑÑ Ñ Ð¾Ñибкой и errno
       пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение EEXIST (Ñакой же
       ÑезÑлÑÑÐ°Ñ ÐºÐ°Ðº Ñ O_CREAT | O_EXCL Ñ open(2)).

       ÐÑи Ñоздании в 9 наÑалÑнÑÑ Ð±Ð¸ÑÐ°Ñ Ð°ÑгÑменÑа
       semflg ÑказÑваÑÑÑÑ Ð¿Ñава (владелеÑ, гÑÑппа и дÑ.)
       на Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов. ФоÑÐ¼Ð°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð±Ð¸Ñов
       ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð°ÑгÑменÑом mode вÑзова open(2) (но
       пÑава на вÑполнение Ð´Ð»Ñ ÑемаÑоÑов ниÑего
       не ознаÑаÑÑ, а пÑава на запиÑÑ Ð¾Ð·Ð½Ð°ÑаÑÑ
       пÑаво изменÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑемаÑоÑов).

       ÐÑи Ñоздании нового набоÑа ÑемаÑоÑов semget()
       иниÑиализиÑÑÐµÑ ÑвÑзаннÑÑ Ñ ÑемаÑоÑом ÑÑÑÑкÑÑÑÑ
       даннÑÑ semid_ds (Ñм. semctl(2)) ÑледÑÑÑим обÑазом:

              ÐолÑм sem_perm.cuid и sem_perm.uid пÑиÑваиваÑÑÑÑ
              знаÑÐµÐ½Ð¸Ñ ÑÑÑекÑивного иденÑиÑикаÑоÑа
              полÑзоваÑÐµÐ»Ñ Ð²ÑзÑваÑÑего пÑоÑеÑÑа.

              ÐолÑм sem_perm.cgid и sem_perm.gid пÑиÑваиваÑÑÑÑ
              знаÑÐµÐ½Ð¸Ñ ÑÑÑекÑивного иденÑиÑикаÑоÑа
              гÑÑÐ¿Ð¿Ñ Ð²ÑзÑваÑÑего пÑоÑеÑÑа.

              ÐладÑим 9 биÑам sem_perm.mode пÑиÑваиваеÑÑÑ
              знаÑение младÑÐ¸Ñ 9 Ð±Ð¸Ñ semflg.

              ÐÐ¾Ð»Ñ sem_nsems пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение nsems.

              ÐÐ¾Ð»Ñ sem_otime пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение 0.

              ÐÐ¾Ð»Ñ sem_ctime пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение
              ÑекÑÑего вÑемени.

       ÐÑли Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов не ÑоздаÑÑÑÑ, Ñо аÑгÑменÑ
       nsems Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñавен 0 (не ÑÑиÑÑваÑÑ). ÐнаÑе
       аÑгÑÐ¼ÐµÐ½Ñ nsems должен бÑÑÑ Ð±Ð¾Ð»ÑÑе 0 и менÑÑе
       или Ñавен макÑималÑÐ½Ð¾Ð¼Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑвÑ
       ÑемаÑоÑов в набоÑе (SEMMSL).

       ÐÑли Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов Ñже ÑÑÑеÑÑвÑеÑ, Ñо
       пÑовеÑÑÑÑÑÑ Ð¿Ñава доÑÑÑпа.

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

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

       EACCES ÐÐ°Ð±Ð¾Ñ ÑемаÑоÑов Ð´Ð»Ñ ÐºÐ»ÑÑа key ÑÑÑеÑÑвÑеÑ, но
              вÑзÑваÑÑий пÑоÑеÑÑ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñав доÑÑÑпа
              к Ð½ÐµÐ¼Ñ Ð¸ не Ð¸Ð¼ÐµÐµÑ Ð¼Ð°Ð½Ð´Ð°Ñа CAP_IPC_OWNER в
              пÑоÑÑÑанÑÑве имÑн полÑзоваÑелÑ, коÑоÑÑй
              ÑпÑавлÑÐµÑ ÐµÐ³Ð¾ пÑоÑÑÑанÑÑвом имÑн IPC.

       EEXIST Ð semflg ÑÐºÐ°Ð·Ð°Ð½Ñ IPC_CREAT и IPC_EXCL, но набоÑ
              ÑемаÑоÑов Ñже ÑÑÑеÑÑвÑÐµÑ Ð´Ð»Ñ key.

       EINVAL ÐнаÑение nsems менÑÑе 0 или болÑÑе
              макÑималÑно возможного Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñа
              колиÑеÑÑва ÑемаÑоÑов (SEMMSL).

       EINVAL ÐÐ°Ð±Ð¾Ñ ÑемаÑоÑов, ÑооÑвеÑÑÑвÑÑÑий key, Ñже
              ÑÑÑеÑÑвÑеÑ, но nsems болÑÑе, Ñем колиÑеÑÑво
              ÑемаÑоÑов в ÑÑом набоÑе.

       ENOENT ÐÐ»Ñ ÐºÐ»ÑÑа key не ÑÑÑеÑÑвÑÐµÑ Ð½Ð°Ð±Ð¾Ñа ÑемаÑоÑов
              и в semflg Ð½ÐµÑ Ñлага IPC_CREAT.

       ENOMEM ÐÐ°Ð±Ð¾Ñ ÑемаÑоÑов должен бÑÑÑ Ñоздан, но в
              ÑиÑÑеме не ÑваÑÐ°ÐµÑ Ð¿Ð°Ð¼ÑÑи Ð´Ð»Ñ ÑÑанениÑ
              новой ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ.

       ENOSPC ÐÐ°Ð±Ð¾Ñ ÑемаÑоÑов должен бÑÑÑ Ñоздан, но
              пÑи ÑÑом бÑÐ´ÐµÑ Ð¿ÑевÑÑен ÑиÑÑемнÑй лимиÑ
              на колиÑеÑÑво набоÑов ÑемаÑоÑов (SEMMNI)
              или ÑиÑÑемнÑй Ð»Ð¸Ð¼Ð¸Ñ Ð½Ð° колиÑеÑÑво
              ÑемаÑоÑов (SEMMNS).

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

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

       ÐнаÑение IPC_PRIVATE не поле Ñлага, а Ñип key_t.
       ÐÑли key Ñавно ÑÑÐ¾Ð¼Ñ ÑпеÑиалÑÐ½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑениÑ, Ñо
       ÑиÑÑемнÑй вÑзов игноÑиÑÑÐµÑ Ð²ÑÑ ÐºÑоме 9-Ñи
       младÑÐ¸Ñ Ð±Ð¸Ñов semflg и ÑоздаÑÑ Ð½Ð¾Ð²Ñй набоÑ
       ÑемаÑоÑов (пÑи ÑÑпеÑном вÑполнении).

   ÐниÑиализаÑÐ¸Ñ ÑемаÑоÑов
       ÐнаÑÐµÐ½Ð¸Ñ ÑолÑко ÑÑо ÑозданнÑÑ ÑемаÑоÑов не
       опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ (в POSIX.1-2001 и POSIX.1-2008 ÑÑо Ñказано
       Ñвно, ÑоÑÑ Ð² POSIX.1-2008 Ñказано, ÑÑо в бÑдÑÑиÑ
       веÑÑиÑÑ ÑÑандаÑÑа Ð¾Ñ ÑеализаÑии можеÑ
       поÑÑебоваÑÑÑÑ Ð¸Ð½Ð¸ÑиализиÑоваÑÑ ÑемаÑоÑÑ 0).
       ХоÑÑ Linux, подобно многим дÑÑгим
       ÑеализаÑиÑм, иниÑиализиÑÑÐµÑ ÑемаÑоÑÑ
       знаÑением 0, пеÑеноÑимое пÑиложение не
       Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ Ð½Ð° ÑÑо: оно должно Ñвно
       иниÑиализиÑоваÑÑ ÑемаÑоÑÑ Ð½ÑжнÑм знаÑением.

       ÐниÑиализаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вÑполнÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
       semctl(2) Ñ Ð¾Ð¿ÐµÑаÑией SETVAL или SETALL. ÐÑи налиÑии
       неÑколÑÐºÐ¸Ñ Ð°Ð±Ð¾Ð½ÐµÐ½Ñов неизвеÑÑно, кÑо
       пеÑвÑй вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ Ð¸Ð½Ð¸ÑиализаÑиÑ, и ÑÑобÑ
       избежаÑÑ ÑоÑÑÑзаÑелÑноÑÑи нÑжно пÑовеÑÑÑÑ
       sem_otime на ненÑлевое знаÑение в ÑвÑзанной
       ÑÑÑÑкÑÑÑе даннÑÑ, полÑÑаемой Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ semctl(2) и
       опеÑаÑии IPC_STAT.

   ÐгÑаниÑÐµÐ½Ð¸Ñ ÑемаÑоÑов
       Ðиже пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° ÑеÑÑÑÑÑ Ð½Ð°Ð±Ð¾Ñа
       ÑемаÑоÑов, оказÑваÑÑие влиÑние на вÑзов
       semget():

       SEMMNI ÐгÑаниÑение на макÑималÑное
              колиÑеÑÑво набоÑов ÑемаÑоÑов. Ð ÑиÑÑемаÑ
              Linux до веÑÑии 3.19, знаÑением по
              ÑмолÑÐ°Ð½Ð¸Ñ ÑÑого огÑаниÑÐµÐ½Ð¸Ñ Ð±Ñло 128.
              ÐаÑÐ¸Ð½Ð°Ñ Ñ Linux 3.19, знаÑение по ÑмолÑаниÑ
              Ñавно 32000. Ð Linux ÑÑо огÑаниÑение можно
              полÑÑаÑÑ Ð¸ изменÑÑÑ ÑеÑез ÑеÑвÑÑÑое поле
              /proc/sys/kernel/sem).

       SEMMSL ÐакÑималÑное колиÑеÑÑво ÑемаÑоÑов на
              один ID ÑемаÑоÑа. Ð ÑиÑÑÐµÐ¼Ð°Ñ Linux до веÑÑии
              3.19, знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ ÑÑого
              огÑаниÑÐµÐ½Ð¸Ñ Ð±Ñло 250. ÐаÑÐ¸Ð½Ð°Ñ Ñ Linux 3.19,
              знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно 32000. Ð Linux
              ÑÑо огÑаниÑение можно полÑÑаÑÑ Ð¸
              изменÑÑÑ ÑеÑез пеÑвое поле
              /proc/sys/kernel/sem).

       SEMMNS ÐгÑаниÑение на макÑималÑное
              колиÑеÑÑво ÑемаÑоÑов в ÑиÑÑеме: завиÑиÑ
              Ð¾Ñ Ð¿Ð¾Ð»Ð¸Ñики (в Linux ÑÑо огÑаниÑение
              можно полÑÑаÑÑ Ð¸ изменÑÑÑ ÑеÑез вÑоÑое
              поле /proc/sys/kernel/sem). ÐамеÑим, ÑÑо
              колиÑеÑÑво ÑемаÑоÑов в ÑиÑÑеме Ñакже
              огÑаниÑено пÑоизведением SEMMSL и SEMMNI.

ÐÐФÐÐТЫ
       ÐÐ¼Ñ IPC_PRIVATE, возможно, бÑло вÑбÑано
       неÑдаÑно, IPC_NEW оÑÑÐ°Ð¶Ð°ÐµÑ ÑмÑÑл дейÑÑÐ²Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ
       ÑÑно.

СÐÐТРÐТРТÐÐÐÐ
       semctl(2), semop(2), ftok(3), capabilities(7), sem_overview(7),
       svipc(7)



Linux                             2015-02-21                         SEMGET(2)