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

FreeBSD Manual Pages

  
 
  

home | help
shmop(2)							      shmop(2)

Name
       shmop, shmat, shmdt - shared memory operations

Syntax
       #include	<sys/types.h>
       #include	<sys/ipc.h>
       #include	<sys/shm.h>

       char *shmat (shmid, shmaddr, shmflg)
       int shmid;
       char *shmaddr;
       int shmflg;

       int shmdt (shmaddr)
       char *shmaddr;

Description
       The  system call	attaches the shared memory segment associated with the
       shared memory identifier	specified by shmid to the data segment of  the
       calling	process.   The segment is attached at the address specified by
       one of the following criteria:

       If shmaddr is equal to zero, the	 segment  is  attached	at  the	 first
       available address as selected by	the system.

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

       If  shmaddr  is not equal to zero and (shmflg & SHM_RND ) is false, the
       segment is attached at the address given	by shmaddr.

       The segment is attached for reading if (shmflg &	SHM_RDONLY ) is	 true.
       Otherwise, it is	attached for reading and writing.

       The  system  call  detaches from	the calling process's data segment the
       shared memory segment located at	the address specified by shmaddr.

Return Values
       Upon successful completion, the return values are as follows:

       o   The system call returns the	data  segment  start  address  of  the
	   attached shared memory segment.

       o   The system call returns a value of zero (0).

       Otherwise,  a value of -1 is returned, and errno	is set to indicate the
       error.

Diagnostics
       The system call fails and not attach the	shared memory segment, if  any
       of the following	is true:

       [EINVAL]	      The shmid	is not a valid shared memory identifier.

       [EACCES]	      Operation	 permission  is	denied to the calling process.
		      For further information, see

       [ENOMEM]	      The available data space is not large enough to accommo-
		      date the shared memory segment.

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

       [EINVAL]	      The shmaddr is not equal to zero,	(shmflg	& SHM_RND ) is
		      false, and the value of shmaddr is an illegal address.

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

       The fails and does not detach the shared	memory segment if:

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

See Also
       execve(2), exit(2), fork(2), shmctl(2), shmget(2)

								      shmop(2)

Name | Syntax | Description | Return Values | Diagnostics | See Also

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

home | help