Name
      
      shmget - allocates a shared memory segment 
      
      
      
      
         
         Library
      
      
      
      
      libc.lib
      
      
      
      
         
         Synopsis
      
      
      
      
      
      
      
      
      
      
         
            |   | 
            
                int
               
               
               shmget (key_t key, size_t size, int flag); 
               
               
               
               
               
               
             | 
         
      
      
         
         Return values
      
      
      Upon successful completion,
      
      
       shmget
      returns the positive integer identifier of a shared memory segment.
      Otherwise, -1 is returned and
      
      
       errno
      set to indicate the error.
      
      
      
      
         
         Detailed description
      
      
      Based on the values of
      
      
       key
      and
      
      
       flag,
      
      
       shmget
      returns the identifier of a newly created or previously existing shared
      memory segment.
      
      
      
      
      
      
      
      
      The key
      is analogous to a filename: it provides a handle that names an
      IPC object.
      There are three ways to specify a key:
      
      
      
      
         
         - IPC_PRIVATE may be specified, in which case a new IPC object
            will be created.
            
            
            
         
 
         - An integer constant may be specified.
            If no IPC object corresponding
            to
            
            
             key
            is specified and the IPC_CREAT bit is set in
            
            
             flag,
            a new one will be created.
            
            
            
         
 
         - The
            
            
            ftok
            may be used to generate a key from a pathname.
            
            
            
         
 
      
      
      
      
      
         The mode of a newly created IPC object is determined by
         
         
          OR Ns’ing
         the following constants into the
         
         
          flag
         argument:
         
         
         
         
         
         
            
               |  SHM_R
                  
                | 
               
                  Read access for user.
                  
                  
                  
                | 
            
            
               |  SHM_W
                  
                | 
               
                  Write access for user.
                  
                  
                  
                | 
            
            
               | ( SHM_R>>3)
                  
                | 
            
            
               |   | 
               
                  Read access for group.
                  
                  
                  
                | 
            
            
               | ( SHM_W>>3)
                  
                | 
            
            
               |   | 
               
                  Write access for group.
                  
                  
                  
                | 
            
            
               | ( SHM_R>>6)
                  
                | 
            
            
               |   | 
               
                  Read access for other.
                  
                  
                  
                | 
            
            
               | ( SHM_W>>6)
                  
                | 
            
            
               |   | 
               
                  Write access for other.
                  
                  
                  
                | 
            
            
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
      
      
         When creating a new shared memory segment,
         
         
          size
         indicates the desired size of the new segment in bytes.
         The size
         of the segment may be rounded up to a multiple convenient to the
         kernel (i.e., the page size).
         
         
         
      
      
         
         Examples
      
      
      
      
      #include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
         
#define SHM_SEG_SIZE 1024
         
int main(void)
{
    int shm_id;
    int perm;
    /*
     * Create a shared memory segment
     */
    perm = SHM_R | SHM_W;
    if ((shm_id = shmget(IPC_PRIVATE, SHM_SEG_SIZE,
                         IPC_CREAT | IPC_EXCL | perm))
         == -1) {
        printf("Shared memory create failed with errno %d\n", errno);
        return -1;
    }
    return 0;
}
         
      
         
         
         
      
      
         
         Errors
      
      
      The
      
      
       shmget
      system call
      will fail if:
      
      
      
      
      
      
      
      
      
      
      
      
         
            | [EINVAL]
               
             | 
         
         
            |   | 
            
               Size specified is greater than the size of the previously existing segment.
               Size specified is less than the system imposed minimum (1 byte), or greater than
               the system imposed maximum (512kb).
               
               
               
             | 
         
         
            | [ENOENT]
               
             | 
         
         
            |   | 
            
               No shared memory segment was found matching
               
               
                key,
               and IPC_CREAT was not specified.
               
               
               
             | 
         
         
            | [ENOSPC]
               
             | 
         
         
            |   | 
            
               A shared memory identifier is to be created but the system-imposed
               limit on the maximum number of allowed shared memory identifiers
               (256) system-wide would be exceeded.
               
               
               
             | 
         
         
            | [ENOMEM]
               
             | 
         
         
            |   | 
            
               The kernel was unable to allocate enough memory to
               satisfy the request.
               
               
               
             | 
         
         
            | [EEXIST]
               
             | 
         
         
            |   | 
            
               IPC_CREAT and IPC_EXCL were specified, and a shared memory segment
               corresponding to
               
               
                key
               already exists.
               
               
               
             | 
         
         
      
      
      
      
         
         See also
      
      
      
      
      shmat,
      
      
      shmctl,
      
      
      shmdt,
      
      
      ftok
      
      
         
      
      
         
      
      
      Feedback
For additional information or queries on this page send feedback	
      
      
         
         
         
            
               | 
                   © 2005-2007 Nokia  
                | 
                
                     
                |