SHMCTL(2)

NAME
shmctl - shared memory control

SYNOPSIS
#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 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 privileges.

The shmid_ds struct 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
Upon successful completion, shmctl() returns 0. Otherwise, it returns -1 and errno is set to indicate the error.

ERRORS
Shmctl() 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.

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