EN JA
SHMCTL(2)
SHMCTL(2) FreeBSD System Calls Manual SHMCTL(2)

NAME

shmctlshared memory control

LIBRARY

Standard C Library (libc, -lc)

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 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() */ 
};

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.
July 17, 1995 FreeBSD