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_ds の shm_perm.uid, shm_perm.gid と shm_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 |