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

名称

shmctl共有メモリ制御

ライブラリ

Standard C Library (libc, -lc)

書式

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

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

解説

shmid によって識別される共有メモリセグメントで cmd によって指定されたアクションを実行します:
IPC_STAT
buf によって指されたメモリに格納するセグメントの struct shmid_ds を取り出します。
IPC_SET
buf によって指された構造体のメンバに一致するセグメントの struct shmid_dsshm_perm.uid, shm_perm.gidshm_perm.mode のメンバを変更します。呼び出しているプロセスの実効ユーザ ID は、 shm_perm.uid または shm_perm.cuid のいずれかと一致しなければなりません、またはスーパユーザの特権がなければなりません。
IPC_RMID
システムからセグメントを削除します。セグメントにアタッチされたすべてのプロセスが終了するまで、削除は、効果を現わしません。しかしながら、いったん IPC_RMID 操作が行なわれると、これ以上、プロセスは、セグメントをアタッチすることを許可されません。操作が成功するために、呼び出しているプロセスの実効ユーザ ID は、 shm_perm.uid または shm_perm.cuid と一致しなければなりません、またはプロセスには、スーパユーザの特権がなければなりません。

shmid_ds 構造体は、次のように定義されます:

struct shmid_ds { 
    struct ipc_perm shm_perm;   /* 操作パーミッション構造体 */ 
    size_t          shm_segsz;  /* バイト単位のセグメントのサイズ */ 
    pid_t           shm_lpid;   /* 最後の共有メモリ操作のプロセス ID */ 
    pid_t           shm_cpid;   /* 作成者のプロセス ID  */ 
    int             shm_nattch; /* 現在のアタッチの数 */ 
    time_t          shm_atime;  /* 最後の shmat() の時刻 */ 
    time_t          shm_dtime;  /* 最後の shmdt() の時刻 */ 
    time_t          shm_ctime;  /* 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 error.

エラー

shmctl() システムコールは、次の場合に失敗します:
[ EINVAL]
無効な操作、または shmid に対応する共有メモリセグメントが見つかりませんでした。
[ EPERM]
呼び出しているプロセスの実効 UID が、共有メモリセグメントの所有者または作成者の UID と一致しません。
[ EACCES]
パーミッションが、操作と共有メモリセグメントモードの間の不一致のために拒否されました。
July 17, 1995 FreeBSD