Provided by: freebsd-manpages_8.2-1_all bug


     shmctl — shared memory control


     Standard C Library (libc, -lc)


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

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


     Performs the action specified by cmd on the shared memory segment
     identified by shmid:

     IPC_STAT     Fetch the segment's struct shmid_ds, storing it in the
                  memory 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
                  effective 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

     The shmid_ds structure is defined as follows:

     struct shmid_ds {
         struct ipc_perm shm_perm;   /* operation permission structure */
         size_t          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 */
         int             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() */


     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


     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.


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