Home Man
Search
Today's Posts
Register

Linux & Unix Commands - Search Man Pages

OpenSolaris 2009.06 - man page for shmop (opensolaris section 2)

shmop(2)				   System Calls 				 shmop(2)

NAME
       shmop, shmat, shmdt - shared memory operations

SYNOPSIS
       #include <sys/types.h>
       #include <sys/shm.h>

       void *shmat(int shmid, const void *shmaddr, int shmflg);

       int shmdt(char *shmaddr);

   Standard conforming
       int shmdt(const void *shmaddr);

DESCRIPTION
       The  shmat() function attaches the shared memory segment associated with the shared memory
       identifier specified by shmid to the data segment of the calling process.

       The permission required for a shared memory control operation is given as  {token},  where
       token  is  the  type of permission needed. The types of permission are interpreted as fol-
       lows:

	 00400	  READ by user
	 00200	  WRITE by user
	 00040	  READ by group
	 00020	  WRITE by group
	 00004	  READ by others
	 00002	  WRITE by others

       See the Shared Memory Operation Permissions section of Intro(2) for more information.

       For shared memory segments created with	the  SHM_SHARE_MMU  or	SHM_PAGEABLE  flags,  the
       default	protections  cannot  be  changed so as to prevent a single process from affecting
       other processes sharing the same shared segment.

       When (shmflg&SHM_SHARE_MMU) is true, virtual memory resources in addition to shared memory
       itself are shared among processes that use the same shared memory.

       When  (shmflg&SHM_PAGEABLE)  is	true, virtual memory resources are shared and the dynamic
       shared memory (DISM) framework is created. The dynamic shared memory can be resized dynam-
       ically  within  the specified size in shmget(2). The DISM shared memory is pageable unless
       it is locked.

       The shared memory segment is attached to the data segment of the calling  process  at  the
       address specified based on one of the  following criteria:

	   o	  If  shmaddr is equal to (void *) 0, the segment is attached to the first avail-
		  able address as selected by the system.

	   o	  If  shmaddr is equal to  (void  *)  0  and  (  shmflg&SHM_SHARE_MMU)	or  (shm-
		  flg&SHM_PAGEABLE)  is true, then the segment is attached to the first available
		  suitably aligned address. When (shmflg&SHM_SHARE_MMU) or  (shmflg&SHM_PAGEABLE)
		  is  set, however, the permission given by  shmget() determines whether the seg-
		  ment is attached for reading or reading and writing.

	   o	  If shmaddr is not equal to (void *) 0 and (shmflg&SHM_RND) is true, the segment
		  is attached to the address given by (shmaddr-  (shmaddr modulus SHMLBA)).

	   o	  If  shmaddr  is not equal to (void *) 0 and (shmflg&SHM_RND) is false, the seg-
		  ment is attached to the address given by shmaddr.

	   o	  The segment is attached for reading if (shmflg&SHM_RDONLY) is true {READ}, oth-
		  erwise it is attached for reading and writing {READ/WRITE}.

       The  shmdt()  function  detaches from the calling process's data segment the shared memory
       segment located at the address specified by shmaddr. If the application	is  standard-con-
       forming	(see standards(5)), the shmaddr argument is of type const void *. Otherwise it is
       of type char *.

       Shared memory segments must be explicitly removed after the last  reference  to	them  has
       been removed.

RETURN VALUES
       Upon successful completion, shmat() returns the data segment start address of the attached
       shared memory segment; shmdt() returns 0. Otherwise, -1 is  returned,  the  shared  memory
       segment is not attached, and errno is set to indicate the error.

ERRORS
       The shmat() function will fail if:

       EACCES	 Operation permission is denied to the calling process (see Intro(2)).

       EINVAL	 The shmid argument is not a valid shared memory identifier.

		 The  shmaddr  argument  is  not equal to 0, and the value of (shmaddr-  (shmaddr
		 modulus SHMLBA)) is an illegal address.

		 The shmaddr argument is not equal  to	0,  is	an  illegal  address,  and  (shm-
		 flg&SHM_RND) is false.

		 The  shmaddr  argument  is  not  equal  to  0,  is  not  properly  aligned,  and
		 (shmfg&SHM_SHARE_MMU) is true.

		 SHM_SHARE_MMU is not supported in certain architectures.

		 Both (shmflg&SHM_SHARE_MMU) and (shmflg&SHM_PAGEABLE) are true.

		 (shmflg&SHM_SHARE_MMU) is true  and  the  shared  memory  segment  specified  by
		 shmid()  had  previously  been  attached  by  a  call	to shmat() in which (shm-
		 flg&SHM_PAGEABLE) was true.

		 (shmflg&SHM_PAGEABLE) is true and the shared memory segment specified by shmid()
		 had   previously   been   attached   by   a  call  to	shmat()  in  which  (shm-
		 flg&SHM_SHARE_MMU) was true.

       EMFILE	 The number of shared memory segments  attached  to  the  calling  process  would
		 exceed the system-imposed limit.

       ENOMEM	 The  available  data space  is not large enough to accommodate the shared memory
		 segment.

       The shmdt() function will fail if:

       EINVAL	 The shmaddr argument is not the data segment start address of	a  shared  memory
		 segment.

       ENOMEM	 (shmflg&SHM_SHARE_MMU)  is true and attaching to the shared memory segment would
		 exceed a limit or resource control on locked memory.

WARNINGS
       Using a fixed value for the shmaddr argument can adversely affect performance  on  certain
       platforms due to D-cache aliasing.

ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:

       +-----------------------------+-----------------------------+
       |      ATTRIBUTE TYPE	     |	    ATTRIBUTE VALUE	   |
       +-----------------------------+-----------------------------+
       |Interface Stability	     |Committed 		   |
       +-----------------------------+-----------------------------+
       |MT-Level		     |Async-Signal-Safe 	   |
       +-----------------------------+-----------------------------+
       |Standard		     |See standards(5). 	   |
       +-----------------------------+-----------------------------+

SEE ALSO
       Intro(2), exec(2), exit(2), fork(2), shmctl(2), shmget(2), attributes(5), standards(5)

SunOS 5.11				   10 Mar 2008					 shmop(2)


All times are GMT -4. The time now is 12:03 PM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
UNIX.COM Login
Username:
Password:  
Show Password