tail head cat sleep
QR code linking to this page

manページ  — SHMCTL

名称

shmctl – 共有メモリ制御

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <machine/param.h>
#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 struct shmid_ds のセグメントを取得し、 buf によって指定されたメモリにそれを保存します。
IPC_SET struct shmid_ds セグメントの shm_perm.uid, shm_perm.gid, および shm_perm.mode の各メンバを buf で指された構造体のメンバに変更します。 呼び出しプロセスの実効ユーザ 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;   /* 操作パーミッション構造体 */
    int             shm_segsz;  /* セグメントのサイズ (バイト単位) */
    pid_t           shm_lpid;   /* 最後の共有メモリ操作のプロセス ID */
    pid_t           shm_cpid;   /* 作成者のプロセス ID  */
    short           shm_nattch; /* 現在のアタッチの数 */
    time_t          shm_atime;  /* 最後の shmat() の時刻 */
    time_t          shm_dtime;  /* 最後の shmdt() の時刻 */
    time_t          shm_ctime;  /* shmctl() による最後の変更の時刻 */
    void           *shm_internal; /* SystemV の愚行 */
};

戻り値

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]
  呼び出しプロセスの実効ユーザ ID が、共有メモリセグメントの所有者 または作成者のユーザ ID と一致しません。
[EACCES]
  操作と共有メモリセグメントモードの間の不一致のために パーミッションが拒絶されました。

関連項目

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

SHMCTL (2) July 17, 1995

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.