shmctl(2) FreeBSD 一般コマンドマニュアル

shmctl

前のページ 上に戻る 次のページ

shmctl




書式

     #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 の愚行 */
     };


戻り値

     関数 shmctl() は、処理が成功すると値 0 を返します。そうでない場合、値 -1
     が返され、グローバル変数 errno が設定されてエラーを示します。


エラー

     shmctl() は次の場合に処理に失敗します。


ABELNET VPSサービス