unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (HP-UX-11.11)
Page:
Section:
Apropos / Subsearch:
optional field



 shmget(2)							   shmget(2)




 NAME
      shmget - get shared memory segment

 SYNOPSIS
      #include <&lt&lt&lt;sys/shm.h>&gt&gt&gt;

      int shmget(key_t key, size_t size, int shmflg);

 DESCRIPTION
      shmget() returns the shared memory identifier associated with key.

      A shared memory identifier and associated data structure and shared
      memory segment of size size bytes (see glossary(9)) are created for
      key if one of the following is true:

	   +  key is equal to IPC_PRIVATE.  This call creates a new
	      identifier, subject to available resources.  The identifier
	      will never be returned by another call to shmget() until it
	      has been released by a call to shmctl().	The identifier
	      should be used among the calling process and its descendents;
	      however, it is not a requirement.	 The resource can be
	      accessed by any process having the proper permissions.

	   +  key does not already have a shared memory identifier
	      associated with it, and (shmflg & IPC_CREAT) is ``true''.	 If
	      IPC_CREAT is set in shmflg the shared memory segment created
	      can only be shared by processes of the same executable type.
	      That is, an application compiled as a 32-bit process will be
	      able to share the same memory segment with other 32-bit
	      processes, and an application compiled as a 64-bit process
	      will be able to share the same memory segment with other 64-
	      bit processes. If a 64-bit bit process wants to create a
	      shared memory segment which can also be shared with 32-bit
	      processes, the 64-bit process must specify IPC_SHARE32 in
	      addition to IPC_CREAT in shmflg.	The 32-bit process does not
	      need to specify IPC_SHARE32.

      On HP Scalable Computing Architecture (SCA) systems with multiple
      locality domains, specifying IPC_MEM_LOCAL in shmflag targets the
      shared memory to the locality on which the allocating thread is
      executing at the time of the call.  This overrides the default
      allocation policy of "first touch", in which memory is allocated from
      the locality domain on which the thread is executing at the time of
      the fault. When IPC_MEM_LOCAL is specified:

	   +  Should there not be enough memory available in the specified
	      locality domain to satisfy the request, memory is allocated
	      from the domain on which the thread is currently executing.

	   +  On systems with a single locality domain, the call has no
	      effect.



 Hewlett-Packard Company	    - 1 -   HP-UX Release 11i: November 2000






 shmget(2)							   shmget(2)




      Upon creation, the data structure associated with the new shared
      memory identifier is initialized as follows:

	   +  shm_perm.cuid, shm_perm.uid, shm_perm.cgid, and shm_perm.gid
	      are set equal to the effective user ID and effective group ID,
	      respectively, of the calling process.

	   +  shm_perm.cuid, the low-order 9 bits of shm_perm.mode are set
	      equal to the low-order 9 bits of shmflg.	shm_segsz is set
	      equal to the value of size.

	   +  shm_lpid, shm_nattch, shm_atime, and shm_dtime are set equal
	      to 0.

	   +  shm_ctime is set equal to the current time.

 EXAMPLES
      The following call to shmget() returns a unique shmid for the newly
      created shared memory segment of 4096 bytes:

	   int myshmid;

	   myshmid = shmget (IPC_PRIVATE, 4096, 0600);

 RETURN VALUE
      Upon successful completion, a non-negative integer, namely a shared
      memory identifier is returned.  Otherwise, a value of -1 is returned
      and errno is set to indicate the error.

 ERRORS
      shmget() fails if any of the following conditions are encountered:

	   [EINVAL]	  size is less than the system-imposed minimum or
			  greater than the system-imposed maximum.

	   [EINVAL]	  A shared memory identifier exists for key but is
			  in 64-bit address space and the process performing
			  the request has been compiled as a 32-bit
			  executable. In order to avoid receiving this
			  error, both IPC_SHARE32 and IPC_CREAT must be set
			  in shmflg by the 64-bit processes upon segment
			  creation.

	   [EACCES]	  A shared memory identifier exists for key but
			  operation permission (see glossary(9)) as
			  specified by the low-order 9 bits of shmflg would
			  not be granted.

	   [EINVAL]	  A shared memory identifier exists for key but the
			  size of the segment associated with it is less
			  than size and size is not equal to zero.



 Hewlett-Packard Company	    - 2 -   HP-UX Release 11i: November 2000






 shmget(2)							   shmget(2)




	   [ENOENT]	  A shared memory identifier does not exist for key
			  and (shmflg & IPC_CREAT) is ``false''.

	   [ENOSPC]	  A shared memory identifier is to be created but
			  the system-imposed limit on the maximum number of
			  allowed shared memory identifiers system wide
			  would be exceeded.

	   [ENOMEM]	  A shared memory identifier and associated shared
			  memory segment are to be created, but the amount
			  of available physical memory is not sufficient to
			  fill the request.

	   [EEXIST]	  A shared memory identifier exists for key but
			  ((shmflg & IPC_CREAT) && (shmflg & IPC_EXCL)) is
			  ``true''.

 SEE ALSO
      ipcrm(1), ipcs(1), shmctl(2), shmop(2), stdipc(3C).

 STANDARDS CONFORMANCE
      shmget(): SVID2, SVID3, XPG2, XPG3, XPG4
































 Hewlett-Packard Company	    - 3 -   HP-UX Release 11i: November 2000