Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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 follows:

       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.

       When (shmflg&SHM_SHARE_MMU) is true, virtual memory resources in	 addi-
       tion  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 dynamically	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 call-
       ing 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 available address as selected	by the system.

	 o  If	shmaddr	is equal to  (void *) 0	and ( shmflg&SHM_SHARE_MMU) or
	    (shmflg&SHM_PAGEABLE) is true, then	the segment is attached	to the
	    first   available	suitably   aligned   address.	 When	 (shm-
	    flg&SHM_SHARE_MMU)	or  (shmflg&SHM_PAGEABLE) is set, however, the
	    permission given by	 shmget() determines whether  the  segment  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 segment is attached to the address given	by shmaddr.

	 o  The	segment	is attached for	reading	if (shmflg&SHM_RDONLY) is true
	    {READ},   otherwise	  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-conforming  (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	refer-
       ence to them has	been removed.

RETURN VALUES
       Upon  successful	completion, shmat() returns the	data segment start ad-
       dress of	the attached shared memory segment; shmdt() returns 0.	Other-
       wise,  -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 identi-
		       fier.

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

       EINVAL	       The shmaddr argument is not equal to 0, is  an  illegal
		       address,	and (shmflg&SHM_RND) is	false.

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

       EINVAL	       SHM_SHARE_MMU is	not  supported	in  certain  architec-
		       tures.

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

       EINVAL	       (shmflg&SHM_SHARE_MMU) is true and  the	shared	memory
		       segment	specified  by  shmid() had previously been at-
		       tached by a call	to shmat() in which  (shmflg&SHM_PAGE-
		       ABLE) was true.

		       (shmflg&SHM_PAGEABLE)  is  true	and  the shared	memory
		       segment specified by shmid() had	 previously  been  at-
		       tached	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	accom-
		       modate the shared memory	segment.

       The shmdt() function will fail if:

       EINVAL	       The shmaddr argument is not the data segment start  ad-
		       dress of	a shared memory	segment.

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

       +-----------------------------+-----------------------------+
       |      ATTRIBUTE	TYPE	     |	    ATTRIBUTE VALUE	   |
       +-----------------------------+-----------------------------+
       |Interface Stability	     |Standard			   |
       +-----------------------------+-----------------------------+
       |MT-Level		     |Async-Signal-Safe		   |
       +-----------------------------+-----------------------------+

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

SunOS 5.10			  1 Sep	2003			      shmop(2)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=shmop&sektion=2&manpath=SunOS+5.10>

home | help