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

FreeBSD Manual Pages

  
 
  

home | help
SHMCTL(2)		    BSD	System Calls Manual		     SHMCTL(2)

NAME
     shmctl -- shared memory control

LIBRARY
     Standard C	Library	(libc, -lc)

SYNOPSIS
     #include <machine/param.h>
     #include <sys/types.h>
     #include <sys/ipc.h>
     #include <sys/shm.h>

     int
     shmctl(int	shmid, int cmd,	struct shmid_ds	*buf);

DESCRIPTION
     Performs the action specified by cmd on the shared	memory segment identi-
     fied by shmid:

     IPC_STAT	  Fetch	the segment's struct shmid_ds, storing it in the mem-
		  ory pointed to by buf.

     IPC_SET	  Changes the shm_perm.uid, shm_perm.gid, and shm_perm.mode
		  members of the segment's struct shmid_ds to match those of
		  the struct pointed to	by buf.	 The calling process's effec-
		  tive uid must	match either shm_perm.uid or shm_perm.cuid, or
		  it must have superuser privileges.

     IPC_RMID	  Removes the segment from the system.	The removal will not
		  take effect until all	processes having attached the segment
		  have exited; however,	once the IPC_RMID operation has	taken
		  place, no further processes will be allowed to attach	the
		  segment.  For	the operation to succeed, the calling
		  process's effective uid must match shm_perm.uid or
		  shm_perm.cuid, or the	process	must have superuser privi-
		  leges.

     The shmid_ds structure is defined as follows:

     struct shmid_ds {
	 struct	ipc_perm shm_perm;   /*	operation permission structure */
	 int		 shm_segsz;  /*	size of	segment	in bytes */
	 pid_t		 shm_lpid;   /*	process	ID of last shared memory op */
	 pid_t		 shm_cpid;   /*	process	ID of creator */
	 short		 shm_nattch; /*	number of current attaches */
	 time_t		 shm_atime;  /*	time of	last shmat() */
	 time_t		 shm_dtime;  /*	time of	last shmdt() */
	 time_t		 shm_ctime;  /*	time of	last change by shmctl()	*/
	 void		*shm_internal; /* sysv stupidity */
     };

RETURN VALUES
     The shmctl() function returns the value 0 if successful; otherwise	the
     value -1 is returned and the global variable errno	is set to indicate the
     error.

ERRORS
     The shmctl() system call will fail	if:

     [EINVAL]		Invalid	operation, or no shared	memory segment was
			found corresponding to shmid.

     [EPERM]		The calling process's effective	uid does not match the
			uid of the shared memory segment's owner or creator.

     [EACCES]		Permission denied due to mismatch between operation
			and mode of shared memory segment.

BUGS
     The segment size has size_t type.	The shm_segsz member of	the shmid_ds
     structure has type	int, which is too short	to represent the full range of
     values for	a segment size.	 If shared memory limits are raised to allow
     segments with size	> 2 GB to be created, be aware that IPC_STAT call may
     return a truncated	value for shm_segsz.

SEE ALSO
     shmat(2), shmdt(2), shmget(2), ftok(3)

BSD				 July 17, 1995				   BSD

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | BUGS | SEE ALSO

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=shmctl&sektion=2&manpath=FreeBSD+7.2-RELEASE>

home | help