semget - get a System V semaphore set identifier


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

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


   The  semget() system call returns the System V semaphore set identifier
   associated with the argument key.  A new set  of  nsems  semaphores  is
   created  if  key  has the value IPC_PRIVATE or if no existing semaphore
   set is associated with key and IPC_CREAT is specified in semflg.

   If semflg specifies both IPC_CREAT and IPC_EXCL  and  a  semaphore  set
   already  exists  for key, then semget() fails with errno set to EEXIST.
   (This is analogous to the effect of the combination  O_CREAT  |  O_EXCL
   for open(2).)

   Upon  creation,  the  least  significant  9 bits of the argument semflg
   define the permissions (for owner, group and others) for the  semaphore
   set.   These  bits  have  the same format, and the same meaning, as the
   mode argument of  open(2)  (though  the  execute  permissions  are  not
   meaningful  for  semaphores,  and  write permissions mean permission to
   alter semaphore values).

   When creating a new  semaphore  set,  semget()  initializes  the  set's
   associated data structure, semid_ds (see semctl(2)), as follows:

          sem_perm.cuid  and sem_perm.uid are set to the effective user ID
          of the calling process.

          sem_perm.cgid and sem_perm.gid are set to the effective group ID
          of the calling process.

          The  least  significant  9  bits of sem_perm.mode are set to the
          least significant 9 bits of semflg.

          sem_nsems is set to the value of nsems.

          sem_otime is set to 0.

          sem_ctime is set to the current time.

   The argument nsems can be 0 (a don't care) when a semaphore set is  not
   being  created.   Otherwise, nsems must be greater than 0 and less than
   or equal  to  the  maximum  number  of  semaphores  per  semaphore  set

   If the semaphore set already exists, the permissions are verified.


   If successful, the return value will be the semaphore set identifier (a
   nonnegative integer), otherwise, -1 is returned, with errno  indicating
   the error.


   On failure, errno will be set to one of the following:

   EACCES A semaphore set exists for key, but the calling process does not
          have permission to  access  the  set,  and  does  not  have  the
          CAP_IPC_OWNER  capability in the user namespace that governs its
          IPC namespace.

   EEXIST IPC_CREAT and IPC_EXCL were specified in semflg, but a semaphore
          set already exists for key.

   EINVAL nsems  is less than 0 or greater than the limit on the number of
          semaphores per semaphore set (SEMMSL).

   EINVAL A semaphore set corresponding to key already exists,  but  nsems
          is larger than the number of semaphores in that set.

   ENOENT No  semaphore  set  exists  for  key  and semflg did not specify

   ENOMEM A semaphore set has to be created but the system does  not  have
          enough memory for the new data structure.

   ENOSPC A  semaphore  set has to be created but the system limit for the
          maximum number of semaphore sets (SEMMNI), or  the  system  wide
          maximum number of semaphores (SEMMNS), would be exceeded.


   SVr4, POSIX.1-2001.


   The  inclusion of <sys/types.h> and <sys/ipc.h> isn't required on Linux
   or by any version of POSIX.  However, some old implementations required
   the inclusion of these header files, and the SVID also documented their
   inclusion.  Applications intended to be portable to  such  old  systems
   may need to include these header files.

   IPC_PRIVATE isn't a flag field but a key_t type.  If this special value
   is used for key, the system call ignores all but the least  significant
   9 bits of semflg and creates a new semaphore set (on success).

   Semaphore initialization
   The  values of the semaphores in a newly created set are indeterminate.
   (POSIX.1-2001 and POSIX.1-2008 are explicit  on  this  point,  although
   POSIX.1-2008 notes that a future version of the standard may require an
   implementation to initialize the semaphores  to  0.)   Although  Linux,
   like many other implementations, initializes the semaphore values to 0,
   a portable application  cannot  rely  on  this:  it  should  explicitly
   initialize the semaphores to the desired values.

   Initialization  can be done using semctl(2) SETVAL or SETALL operation.
   Where multiple peers do not know who will be the  first  to  initialize
   the  set,  checking  for  a  nonzero  sem_otime  in the associated data
   structure retrieved by a semctl(2) IPC_STAT operation can  be  used  to
   avoid races.

   Semaphore limits
   The  following  limits  on  semaphore set resources affect the semget()

   SEMMNI System-wide limit on the number of  semaphore  sets.   On  Linux
          systems  before  version  3.19, the default value for this limit
          was 128.  Since Linux 3.19, the default  value  is  32,000.   On
          Linux,  this limit can be read and modified via the fourth field
          of /proc/sys/kernel/sem.

   SEMMSL Maximum number of semaphores per semaphore ID.  On Linux systems
          before  version  3.19, the default value for this limit was 250.
          Since Linux 3.19, the default value is 32,000.  On  Linux,  this
          limit   can  be  read  and  modified  via  the  first  field  of

   SEMMNS System-wide limit on the number of semaphores: policy  dependent
          (on  Linux,  this  limit can be read and modified via the second
          field  of  /proc/sys/kernel/sem).   Note  that  the  number   of
          semaphores  system-wide is also limited by the product of SEMMSL
          and SEMMNI.


   The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would more
   clearly show its function.


   semctl(2),   semop(2),   ftok(3),   capabilities(7),   sem_overview(7),


   This page is part of release 4.09 of the Linux  man-pages  project.   A
   description  of  the project, information about reporting bugs, and the
   latest    version    of    this    page,    can     be     found     at


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.

Free Software

Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.

Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.

Free Books

The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.

Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.

Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.