.\" Updated & Modified 2005-10-08, Akihiro MOTOKI
.\" Updated 2006-07-21, Akihiro MOTOKI, LDP v2.36
.\"
-.\"WORD: shared memory ¶¦Í¥á¥â¥ê
-.\"WORD: segment ¥»¥°¥á¥ó¥È
-.\"WORD: owner ½êͼÔ
-.\"WORD: group ¥°¥ë¡¼¥×
-.\"WORD: creator ºîÀ®¼Ô
-.\"WORD: super-user ¥¹¡¼¥Ñ¡¼¡¦¥æ¡¼¥¶¡¼
-.\"WORD: detach ʬΥ
-.\"WORD: attach ÉÕ²Ã
-.\"WORD: swap ¥¹¥ï¥Ã¥×
-.\"WORD: identifier ¼±ÊÌ»Ò
-.\"WORD: member ¥á¥ó¥Ð¡¼
-.\"WORD: feature test macro µ¡Ç½¸¡ºº¥Þ¥¯¥í
+.\"WORD: shared memory 共有メモリ
+.\"WORD: segment セグメント
+.\"WORD: owner 所有者
+.\"WORD: group グループ
+.\"WORD: creator 作成者
+.\"WORD: super-user ã\82¹ã\83¼ã\83\91ã\83¼ã\83»ã\83¦ã\83¼ã\82¶ã\83¼
+.\"WORD: detach 分離
+.\"WORD: attach 付加
+.\"WORD: swap スワップ
+.\"WORD: identifier 識別子
+.\"WORD: member ã\83¡ã\83³ã\83\90ã\83¼
+.\"WORD: feature test macro 機能検査マクロ
.\"
.TH SHMCTL 2 2008-08-07 "Linux" "Linux Programmer's Manual"
-.SH ̾Á°
-shmctl \- ¶¦Í¥á¥â¥ê (shared memory) ¤òÀ©¸æ¤¹¤ë
-.SH ½ñ¼°
+.SH 名前
+shmctl \- 共有メモリ (shared memory) を制御する
+.SH 書式
.ad l
.B #include <sys/ipc.h>
.br
.sp
.BI "int shmctl(int " shmid ", int " cmd ", struct shmid_ds *" buf );
.ad b
-.SH ÀâÌÀ
+.SH 説明
.BR shmctl ()
-¤Ï¡¢¼±Ê̻Ҥ¬
+は、識別子が
.I shmid
-¤Î¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ËÂФ·¤Æ
+の共有メモリ・セグメントに対して
.I cmd
-¤Ç»Ø¼¨¤·¤¿À©¸æÌ¿Îá¤ò¼Â¹Ô¤¹¤ë¡£
+で指示した制御命令を実行する。
.PP
.I buf
-°ú¤¿ô¤Ï¡¢ \fIshmid_ds\fP ¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£
-¤³¤Î¹½Â¤ÂÎ¤Ï \fI<sys/shm.h>\fP ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë
+引き数は、 \fIshmid_ds\fP 構造体へのポインタである。
+この構造体は \fI<sys/shm.h>\fP で以下のように定義されている
.PP
.in +4n
.nf
struct shmid_ds {
- struct ipc_perm shm_perm; /* ½ê͸¢¤Èµö²Ä */
- size_t shm_segsz; /* ¥»¥°¥á¥ó¥È¤Î¥µ¥¤¥º (¥Ð¥¤¥È) */
- time_t shm_atime; /* ºÇ¸å¤ÎÉղà (attach) ¤Î»þ¹ï */
- time_t shm_dtime; /* ºÇ¸å¤ÎʬΥ (detach) ¤Î»þ¹ï */
- time_t shm_ctime; /* ºÇ¸å¤ËÊѹ¹¤¬¹Ô¤ï¤ì¤¿»þ¹ï */
- pid_t shm_cpid; /* ºîÀ®¼Ô (creator) ¤Î PID */
- pid_t shm_lpid; /* ºÇ¸å¤Î shmat(2)/shmdt(2) ¤Î PID */
- shmatt_t shm_nattch; /* ¸½ºßÉղ䵤ì¤Æ¤¤¤ë¿ô */
+ struct ipc_perm shm_perm; /* 所有権と許可 */
+ size_t shm_segsz; /* セグメントのサイズ (バイト) */
+ time_t shm_atime; /* 最後の付加 (attach) の時刻 */
+ time_t shm_dtime; /* 最後の分離 (detach) の時刻 */
+ time_t shm_ctime; /* 最後に変更が行われた時刻 */
+ pid_t shm_cpid; /* 作成者 (creator) の PID */
+ pid_t shm_lpid; /* 最後の shmat(2)/shmdt(2) の PID */
+ shmatt_t shm_nattch; /* 現在付加されている数 */
...
};
.fi
.in
.PP
.I ipc_perm
-¹½Â¤ÂÎ¤Ï \fI<sys/ipc.h>\fP ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë
-(¶¯Ä´¤µ¤ì¤¿¥Õ¥£¡¼¥ë¥É¤Ï
+構造体は \fI<sys/ipc.h>\fP で以下のように定義されている
+(強調されたフィールドは
.B IPC_SET
-¤ò»È¤Ã¤ÆÀßÄê²Äǽ¤Ç¤¢¤ë):
+を使って設定可能である):
.PP
.in +4n
.nf
struct ipc_perm {
- key_t __key; /* shmget(2) ¤ËÍ¿¤¨¤é¤ì¤ë¥¡¼ */
- uid_t \fBuid\fP; /* ½êͼԤμ¸ú UID */
- gid_t \fBgid\fP; /* ½êͼԤμ¸ú GID */
- uid_t cuid; /* ºîÀ®¼Ô¤Î¼Â¸ú UID */
- gid_t cgid; /* ºîÀ®¼Ô¤Î¼Â¸ú GID */
- unsigned short \fBmode\fP; /* \fBµö²Ä\fP + SHM_DEST ¤È
- SHM_LOCKED ¥Õ¥é¥° */
- unsigned short __seq; /* ¥·¡¼¥±¥ó¥¹ÈÖ¹æ */
+ key_t __key; /* shmget(2) ã\81«ä¸\8eã\81\88ã\82\89ã\82\8cã\82\8bã\82ã\83¼ */
+ uid_t \fBuid\fP; /* 所有者の実効 UID */
+ gid_t \fBgid\fP; /* 所有者の実効 GID */
+ uid_t cuid; /* 作成者の実効 UID */
+ gid_t cgid; /* 作成者の実効 GID */
+ unsigned short \fBmode\fP; /* \fB許可\fP + SHM_DEST と
+ SHM_LOCKED ã\83\95ã\83©ã\82° */
+ unsigned short __seq; /* シーケンス番号 */
};
.fi
.in
.PP
.I cmd
-¤È¤·¤Æ͸ú¤ÊÃͤϰʲ¼¤ÎÄ̤ê:
+として有効な値は以下の通り:
.br
.TP 10
.B IPC_STAT
.I shmid
-¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿¥«¡¼¥Í¥ë¥Ç¡¼¥¿¹½Â¤ÂΤξðÊó¤ò
-\fIbuf\fP ¤Ç»Ø¤µ¤ì¤¿
+に関連づけられたカーネルデータ構造体の情報を
+\fIbuf\fP で指された
.I shmid_ds
-¹½Â¤ÂΤ˥³¥Ô¡¼¤¹¤ë¡£
-¸Æ¤Ó½Ð¤·¸µ¤Ï¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ËÂФ¹¤ë
-Æɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+構造体にコピーする。
+呼び出し元は共有メモリ・セグメントに対する
+読み込み許可を持たなければならない。
.TP
.B IPC_SET
.I buf
-¤Ë¤è¤Ã¤Æ»Ø¤µ¤ì¤ë
+によって指される
.I shmid_ds
-¹½Â¤ÂΤΤ¤¤¯¤Ä¤«¤Î¥á¥ó¥Ð¡¼¤ÎÃͤò¡¢
-¤³¤Î¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿¥«¡¼¥Í¥ë¥Ç¡¼¥¿¹½Â¤ÂΤ˽ñ¤¹þ¤ß¡¢
+構造体のいくつかのメンバーの値を、
+この共有メモリ・セグメントに関連づけられたカーネルデータ構造体に書き込み、
.I shm_ctime
-¥á¥ó¥Ð¡¼¤â¹¹¿·¤¹¤ë¡£
-°Ê²¼¤Î¥Õ¥£¡¼¥ë¥É¤ÏÊѹ¹¤Ç¤¤ë¡£
+メンバーも更新する。
+以下のフィールドは変更できる。
\fIshm_perm.uid\fP, \fIshm_perm.gid\fP,
-\fIshm_perm.mode\fP (¤ÎºÇ²¼°Ì 9 ¥Ó¥Ã¥È)¡£
-¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú UID ¤¬½êͼÔ
+\fIshm_perm.mode\fP (の最下位 9 ビット)。
+呼び出したプロセスの実効 UID が所有者
.RI ( shm_perm.uid )
-¤Þ¤¿¤ÏºîÀ®¼Ô
+または作成者
.RI ( shm_perm.cuid )
-¤È°ìÃפ¹¤ë¤«¡¢¸Æ¤Ó½Ð¤·¸µ¤¬Æø¢¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+と一致するか、呼び出し元が特権を持たなければならない。
.TP
.B IPC_RMID
-¥»¥°¥á¥ó¥È¤ËÇË´þºÑ¤ß¤Î¥Þ¡¼¥¯¤òÉÕ¤±¤ë¡£
-¥»¥°¥á¥ó¥È¤Ï¡¢¼ÂºÝ¤Ë¤ÏºÇ¸å¥×¥í¥»¥¹¤¬¥»¥°¥á¥ó¥È¤òʬΥ¤·¤¿ (´ØÏ¢¤¹¤ë
+セグメントに破棄済みのマークを付ける。
+セグメントは、実際には最後プロセスがセグメントを分離した (関連する
.I shmid_ds
-¹½Â¤ÂΤÎ
+構造体の
.I shm_nattch
-¥á¥ó¥Ð¡¼¤¬ 0 ¤Ë¤Ê¤Ã¤¿) ¸å¤Ç¤Î¤ßÇË´þ¤µ¤ì¤ë¡£
-¸Æ¤Ó½Ð¤·¸µ¤Ï½êͼԤ«ºîÀ®¼Ô¤Ç¤¢¤ë¤«¡¢Æø¢¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¥»¥°¥á¥ó¥È¤ËÇË´þ¤Î¥Þ¡¼¥¯¤¬ÉÕ¤±¤é¤ì¤ë¤È¡¢
-´ØÏ¢¤¹¤ë¥Ç¡¼¥¿¹½Â¤ÂΤˤª¤¤¤Æ
+メンバーが 0 になった) 後でのみ破棄される。
+呼び出し元は所有者か作成者であるか、特権を持たなければならない。
+セグメントに破棄のマークが付けられると、
+関連するデータ構造体において
.I shm_perm.mode
-¥Õ¥£¡¼¥ë¥É¤Î (ɸ½à¤Ç¤Ï¤Ê¤¤)
+フィールドの (標準ではない)
.B SHM_DEST
-¥Õ¥é¥°¤¬ÀßÄꤵ¤ì¤ë¡£
-¤³¤Î¥Ç¡¼¥¿¹½Â¤ÂΤÏ
+フラグが設定される。
+このデータ構造体は
.B IPC_STAT
-¤Ç¼èÆÀ¤µ¤ì¤ë¡£
+で取得される。
.PP
-¸Æ¤Ó½Ð¤·¸µ¤ÏºÇ½ªÅª¤Ë¤Ï¥»¥°¥á¥ó¥È¤ò˺¤ì¤º¤ËÇË´þ\fI¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤\fP¡£
-¤½¤¦¤Ç¤Ê¤ì¤Ð¡¢¥Õ¥©¡¼¥ë¥È (fault) ¤µ¤ì¤¿¥Ú¡¼¥¸¤Ï
-¥á¥â¥ê¤«¥¹¥ï¥Ã¥× (swap) ¤Ë»Ä¤ê³¤±¤ë¡£
+呼び出し元は最終的にはセグメントを忘れずに破棄\fIしなければならない\fP。
+そうでなれば、フォールト (fault) されたページは
+メモリかスワップ (swap) に残り続ける。
.TP 10
-.BR IPC_INFO " (Linux ¸ÇÍ)"
-¥·¥¹¥Æ¥àÁ´ÂΤǤζ¦Í¥á¥â¥ê¤ÎÀ©¸Â¤È¥Ñ¥é¥á¡¼¥¿¤Ë´Ø¤¹¤ë¾ðÊó¤ò¡¢
+.BR IPC_INFO " (Linux 固有)"
+システム全体での共有メモリの制限とパラメータに関する情報を、
.I buf
-¤¬»Ø¤¹¹½Â¤ÂΤËÆþ¤ì¤ÆÊÖ¤¹¡£
-¤³¤Î¹½Â¤ÂΤÏ
+が指す構造体に入れて返す。
+この構造体は
.I shminfo
-·¿¤Ç¤¢¤ë (¤½¤Î¤¿¤á¥¥ã¥¹¥È¤¬É¬ÍפǤ¢¤ë)¡£
+型である (そのためキャストが必要である)。
.I shminfo
-¤Ï
+は
.B _GNU_SOURCE
-µ¡Ç½¸¡ºº¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤¿¾ì¹ç¤Ë
+機能検査マクロが定義された場合に
.I <sys/shm.h>
-¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤ë:
+で以下のように定義される:
.nf
.in +4n
struct shminfo {
- unsigned long shmmax; /* ºÇÂ祻¥°¥á¥ó¥È¥µ¥¤¥º */
- unsigned long shmmin; /* ºÇ¾®¥»¥°¥á¥ó¥È¥µ¥¤¥º¡£
- ¾ï¤Ë 1 */
- unsigned long shmmni; /* ºÇÂ祻¥°¥á¥ó¥È¿ô */
- unsigned long shmseg; /* ¥×¥í¥»¥¹¤¬ÉղäǤ¤ë
- ¥»¥°¥á¥ó¥È¤ÎºÇÂç¿ô¡£
- ¥«¡¼¥Í¥ëÆâ¤Ç¤Ï̤»ÈÍÑ */
- unsigned long shmall; /* ¶¦Í¥á¥â¥ê¤ÎºÇÂç¥Ú¡¼¥¸¿ô¡£
- ¥·¥¹¥Æ¥àÁ´ÂΤǤÎÃÍ */
+ unsigned long shmmax; /* æ\9c\80大ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\82µã\82¤ã\82º */
+ unsigned long shmmin; /* 最小セグメントサイズ。
+ 常に 1 */
+ unsigned long shmmni; /* 最大セグメント数 */
+ unsigned long shmseg; /* プロセスが付加できる
+ セグメントの最大数。
+ カーネル内では未使用 */
+ unsigned long shmall; /* 共有メモリの最大ページ数。
+ システム全体での値 */
};
.in
.fi
-ÀßÄê
+設定
.IR shmmni ,
.IR shmmax ,
.I shmall
-¤Ï
+は
.I /proc
-¤Ë¤¢¤ëƱ¤¸Ì¾Á°¤Î¥Õ¥¡¥¤¥ë·Ðͳ¤ÇÊѹ¹²Äǽ¤Ç¤¢¤ë¡£
-¾Ü¤·¤¯¤Ï
+にある同じ名前のファイル経由で変更可能である。
+詳しくは
.BR proc (5)
-¤ò»²¾È¡£
+を参照。
.TP
-.BR SHM_INFO " (Linux ¸ÇÍ)"
-¶¦Í¥á¥â¥ê¤¬¾ÃÈñ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à»ñ¸»¤Ë´Ø¤¹¤ë¾ðÊó¤ò
-³ÊǼ¤·¤¿
+.BR SHM_INFO " (Linux 固有)"
+共有メモリが消費しているシステム資源に関する情報を
+格納した
.I shm_info
-¹½Â¤ÂΤòÊÖ¤¹¡£
-¤³¤Î¹½Â¤ÂΤϡ¢
+構造体を返す。
+この構造体は、
.B _GNU_SOURCE
-µ¡Ç½¸¡ºº¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤¿¾ì¹ç¤Ë
+機能検査マクロが定義された場合に
.I <sys/shm.h>
-¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤ë:
+で以下のように定義される:
.nf
.in +4n
struct shm_info {
- int used_ids; /* ¸½ºß¸ºß¤¹¤ë¥»¥°¥á¥ó¥È¿ô */
- unsigned long shm_tot; /* ¶¦Í¥á¥â¥ê¤Î¥Ú¡¼¥¸Áí¿ô */
- unsigned long shm_rss; /* ¥á¥â¥ê¾å¤Ë¤¢¤ë (¥¹¥ï¥Ã¥×¤µ¤ì¤Æ
- ¤¤¤Ê¤¤) ¶¦Í¥á¥â¥ê¥Ú¡¼¥¸¿ô */
- unsigned long shm_swp; /* ¥¹¥ï¥Ã¥×¤µ¤ì¤Æ¤¤¤ë¶¦Í¥á¥â¥ê
- ¥Ú¡¼¥¸¿ô */
+ int used_ids; /* 現在存在するセグメント数 */
+ unsigned long shm_tot; /* 共有メモリのページ総数 */
+ unsigned long shm_rss; /* メモリ上にある (スワップされて
+ いない) 共有メモリページ数 */
+ unsigned long shm_swp; /* スワップされている共有メモリ
+ ページ数 */
unsigned long swap_attempts;
- /* Linux 2.4 °Ê¹ß¤Ç¤Ï̤»ÈÍÑ */
+ /* Linux 2.4 以降では未使用 */
unsigned long swap_successes;
- /* Linux 2.4 °Ê¹ß¤Ç¤Ï̤»ÈÍÑ */
+ /* Linux 2.4 以降では未使用 */
};
.in
.fi
.TP
-.BR SHM_STAT " (Linux ¸ÇÍ)"
+.BR SHM_STAT " (Linux 固有)"
.B IPC_STAT
-¤ÈƱ¤¸¤¯
+と同じく
.I shmid_ds
-¹½Â¤ÂΤòÊÖ¤¹¡£
-⤷¡¢
+構造体を返す。
+但し、
.I shmid
-°ú¤¿ô¤Ï¡¢¥»¥°¥á¥ó¥È¼±Ê̻ҤǤϤʤ¯¡¢¥·¥¹¥Æ¥à¾å¤ÎÁ´¤Æ¤Î¶¦Í¥á¥â¥ê
-¥»¥°¥á¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤ò´ÉÍý¤¹¤ë¥«¡¼¥Í¥ë¤ÎÆâÉôÇÛÎó¤Ø¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹
-¤Ç¤¢¤ë¡£
+引き数は、セグメント識別子ではなく、システム上の全ての共有メモリ
+ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81«é\96¢ã\81\99ã\82\8bæ\83\85å ±ã\82\92管ç\90\86ã\81\99ã\82\8bã\82«ã\83¼ã\83\8dã\83«ã\81®å\86\85é\83¨é\85\8då\88\97ã\81¸ã\81®ã\82¤ã\83³ã\83\87ã\83\83ã\82¯ã\82¹
+である。
.PP
-¸Æ¤Ó½Ð¤·¸µ¤Ï¡¢\fIcmd\fP ¤Ë°Ê²¼¤ÎÃͤò»ØÄꤹ¤ë¤³¤È¤Ç¡¢¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤¬
-¥¹¥ï¥Ã¥×¤µ¤ì¤ë¤³¤È¤òËɻߤ·¤¿¤ê¡¢µö²Ä¤·¤¿¤ê¤Ç¤¤ë:
+呼び出し元は、\fIcmd\fP に以下の値を指定することで、共有メモリ・セグメントが
+スワップされることを防止したり、許可したりできる:
.br
.TP 10
-.BR SHM_LOCK " (Linux ¸ÇÍ)"
-¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ò¥¹¥ï¥Ã¥×¤¹¤ë¤³¤È¤òËɻߤ¹¤ë¡£
-¥í¥Ã¥¯¤¬Í¸ú¤Ë¤Ê¤Ã¤¿¸å¡¢¸Æ¤Ó½Ð¤·¸µ¤Ï¡¢
-¸ºß¤¹¤ë¤³¤È¤¬Í׵ᤵ¤ì¤¿Á´¤Æ¤Î¥Ú¡¼¥¸¤ò¥Õ¥©¡¼¥ë¥È¤µ¤»¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¥»¥°¥á¥ó¥È¤¬¥í¥Ã¥¯¤µ¤ì¤ë¤È¡¢
-´ØÏ¢¤¹¤ë¥Ç¡¼¥¿¹½Â¤ÂΤˤª¤¤¤Æ
+.BR SHM_LOCK " (Linux 固有)"
+共有メモリ・セグメントをスワップすることを防止する。
+ロックが有効になった後、呼び出し元は、
+存在することが要求された全てのページをフォールトさせなければならない。
+セグメントがロックされると、
+関連するデータ構造体において
.I shm_perm.mode
-¥Õ¥£¡¼¥ë¥É¤Î (ɸ½àŪ¤Ç¤Ï¤Ê¤¤)
+フィールドの (標準的ではない)
.B SHM_LOCKED
-¥Õ¥é¥°¤¬ÀßÄꤵ¤ì¤ë¡£
-¤³¤Î¥Ç¡¼¥¿¹½Â¤ÂΤÏ
+フラグが設定される。
+このデータ構造体は
.B IPC_STAT
-¤Ç¼èÆÀ¤µ¤ì¤ë¡£
+で取得される。
.TP
-.BR SHM_UNLOCK " (Linux ¸ÇÍ)"
-¥»¥°¥á¥ó¥È¤Î¥í¥Ã¥¯¤ò²ò½ü¤·¡¢¥¹¥ï¥Ã¥×¡¦¥¢¥¦¥È¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¡£
+.BR SHM_UNLOCK " (Linux 固有)"
+セグメントのロックを解除し、スワップ・アウトすることを可能にする。
.PP
-2.6.10 ¤è¤êÁ°¤Î¥«¡¼¥Í¥ë¤Ç¤Ï¡¢Æø¢¥×¥í¥»¥¹¤À¤±¤¬
+2.6.10 より前のカーネルでは、特権プロセスだけが
.B SHM_LOCK
-¤È
+と
.B SHM_UNLOCK
-¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤¿¡£
-2.6.10 °Ê¹ß¤Î¥«¡¼¥Í¥ë¤Ç¤Ï¡¢ÈóÆø¢¥×¥í¥»¥¹¤Ç¤¢¤Ã¤Æ¤â¼¡¤Î¾ò·ï¤òËþ¤¿¤»¤Ð
-¤³¤ì¤é¤ÎÁàºî¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¤½¤Î¾ò·ï¤È¤Ï¡¢¥×¥í¥»¥¹¤Î¼Â¸ú UID
-¤¬¤½¤Î¥»¥°¥á¥ó¥È¤Î½êͼԤ⤷¤¯¤ÏºîÀ®¼Ô¤Î UID ¤È°ìÃפ·¡¢
+を利用することができた。
+2.6.10 以降のカーネルでは、非特権プロセスであっても次の条件を満たせば
+これらの操作を利用することができる。その条件とは、プロセスの実効 UID
+がそのセグメントの所有者もしくは作成者の UID と一致し、
.RB ( SHM_LOCK
-¤Î¾ì¹ç¤Ë¤Ï) ¥í¥Ã¥¯¤¹¤ë¥á¥â¥ê¤Î¹ç·×¤¬
+の場合には) ロックするメモリの合計が
.B RLIMIT_MEMLOCK
-¥ê¥½¡¼¥¹¾å¸Â
+リソース上限
.RB ( setrlimit (2)
-»²¾È) ¤ÎÈÏ°ÏÆâ¤ËÆþ¤Ã¤Æ¤¤¤ë¤³¤È¤Ç¤¢¤ë¡£
+参照) の範囲内に入っていることである。
.\" There was some weirdness in 2.6.9: SHM_LOCK and SHM_UNLOCK could
.\" be applied to a segment, regardless of ownership of the segment.
.\" This was a botch-up in the move to RLIMIT_MEMLOCK, and was fixed
.\" in 2.6.10. MTK, May 2005
-.SH ÊÖ¤êÃÍ
+.SH 返り値
.B IPC_INFO
-¤È
+と
.B SHM_INFO
-Áàºî¤Ï¡¢À®¸ù¤¹¤ë¤È¡¢Á´¤Æ¤Î¶¦Í¥á¥â¥ê¥»¥°¥á¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤ò
-´ÉÍý¤·¤Æ¤¤¤ë¥«¡¼¥Í¥ë¤ÎÆâÉôÇÛÎó¤Î»ÈÍÑÃ楨¥ó¥È¥ê¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Î
-¤¦¤ÁºÇÂçÃͤòÊÖ¤¹
-(¤³¤Î¾ðÊó¤Ï¡¢¥·¥¹¥Æ¥à¤ÎÁ´¤Æ¤Î¶¦Í¥á¥â¥ê¥»¥°¥á¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤ò
-¼èÆÀ¤¹¤ë¤¿¤á¤Ë¡¢
+操作は、成功すると、全ての共有メモリセグメントに関する情報を
+管理しているカーネルの内部配列の使用中エントリのインデックスの
+うち最大値を返す
+(この情報は、システムの全ての共有メモリセグメントに関する情報を
+取得するために、
.B SHM_STAT
-Áàºî¤ò·«¤êÊÖ¤·¼Â¹Ô¤¹¤ëºÝ¤Ë»ÈÍѤǤ¤ë)¡£
+操作を繰り返し実行する際に使用できる)。
.B SHM_STAT
-Áàºî¤Ï¡¢À®¸ù¤¹¤ë¤È¡¢
+操作は、成功すると、
.I shmid
-¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò»ý¤Ä¶¦Í¥á¥â¥ê¥»¥°¥á¥ó¥È¤Î¼±Ê̻ҤòÊÖ¤¹¡£
-¾¤ÎÁàºî¤Ï¡¢À®¸ù¤Î¾ì¹ç 0 ¤òÊÖ¤¹¡£
+で指定されたインデックスを持つ共有メモリセグメントの識別子を返す。
+他の操作は、成功の場合 0 を返す。
-¥¨¥é¡¼¤Î¾ì¹ç¤Ï \-1 ¤òÊÖ¤·¡¢
+エラーの場合は \-1 を返し、
.I errno
-¤òŬÀÚ¤ËÀßÄꤹ¤ë¡£
-.SH ¥¨¥é¡¼
+を適切に設定する。
+.SH ã\82¨ã\83©ã\83¼
.TP
.B EACCES
-\fBIPC_STAT\fP ¤Þ¤¿¤Ï \fBSHM_STAT\fP ¤¬Í׵ᤵ¤ì¡¢
-\fIshm_perm.mode\fP ¤¬
+\fBIPC_STAT\fP または \fBSHM_STAT\fP が要求され、
+\fIshm_perm.mode\fP が
.I shmid
-¤Ø¤ÎÆɤ߹þ¤ß¥¢¥¯¥»¥¹¤òµö¤·¤Æ¤ª¤é¤º¡¢
-¤«¤Ä¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬
+への読み込みアクセスを許しておらず、
+かつ呼び出したプロセスが
.B CAP_IPC_OWNER
-¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capability) ¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£
+ケーパビリティ (capability) を持っていない。
.TP
.B EFAULT
.I cmd
-°ú¤¿ô¤Ë
+引き数に
.B IPC_SET
-¤«
+か
.B IPC_STAT
-¤¬»ØÄꤵ¤ì¤¿¤¬
+が指定されたが
.I buf
-¤Ç»Ø¤µ¤ì¤Æ¤¤¤ë¥¢¥É¥ì¥¹¤Ë¥¢¥¯¥»¥¹¤Ç¤¤Ê¤¤¡£
+で指されているアドレスにアクセスできない。
.TP
.B EIDRM
-\fIshmid\fP ¤¬ºï½ü (remove) ¤µ¤ì¤¿¼±ÊÌ»Ò (identifier) ¤ò»Ø¤·¤Æ¤¤¤ë¡£
+\fIshmid\fP が削除 (remove) された識別子 (identifier) を指している。
.TP
.B EINVAL
-\fIshmid\fP ¤¬Í¸ú¤Ê¼±Ê̻ҤǤʤ¤¤«¡¢
-\fIcmd\fP ¤¬Í¸ú¤Ê¥³¥Þ¥ó¥É¤Ç¤Ê¤¤¡£
-¤â¤·¤¯¤Ï¡¢
+\fIshmid\fP が有効な識別子でないか、
+\fIcmd\fP が有効なコマンドでない。
+もしくは、
.B SHM_STAT
-Áàºî¤Î¾ì¹ç¤Ë¡¢
+操作の場合に、
.I shmid
-¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹Ãͤ¬¸½ºß̤»ÈÍѤÎÇÛÎó¤Î¥¹¥í¥Ã¥È¤ò»²¾È¤·¤Æ¤¤¤¿¡£
+で指定されたインデックス値が現在未使用の配列のスロットを参照していた。
.TP
.B ENOMEM
-(2.6.9 °Ê¹ß¤Î¥«¡¼¥Í¥ë¤Ë¤ª¤¤¤Æ)
+(2.6.9 以降のカーネルにおいて)
.B SHM_LOCK
-¤¬»ØÄꤵ¤ì¡¢
-¥í¥Ã¥¯¤µ¤ì¤ëͽÄê¤Î¥»¥°¥á¥ó¥È¤Î¥µ¥¤¥º
-(¥í¥Ã¥¯¤µ¤ì¤ë¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Î¹ç·×¥Ð¥¤¥È¿ô) ¤¬¡¢
-¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¥æ¡¼¥¶¡¼ ID ¤Ë¤Ä¤¤¤Æ¤ÎÀ©¸Â¤òĶ¤¨¤¿¡£
-¤³¤ÎÀ©¸Â¤Ï
+が指定され、
+ã\83ã\83\83ã\82¯ã\81\95ã\82\8cã\82\8bäº\88å®\9aã\81®ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81®ã\82µã\82¤ã\82º
+(ロックされる共有メモリ・セグメントの合計バイト数) が、
+呼び出したプロセスの実ユーザー ID についての制限を超えた。
+この制限は
.B RLIMIT_MEMLOCK
-¥½¥Õ¥È»ñ¸»À©¸Â¤ÇÄêµÁ¤µ¤ì¤ë
+ソフト資源制限で定義される
.RB ( setrlimit (2)
-¤ò»²¾È)¡£
+を参照)。
.TP
.B EOVERFLOW
-\fBIPC_STAT\fP ¤¬»î¤ß¤é¤ì¡¢GID ¤ä UID ¤ÎÃͤ¬
+\fBIPC_STAT\fP が試みられ、GID や UID の値が
.I buf
-¤Ç»Ø¼¨¤µ¤ì¤ë¹½Â¤ÂΤ˳ÊǼ¤¹¤ë¤Ë¤ÏÂ礲᤮¤ë¡£
+で指示される構造体に格納するには大き過ぎる。
.TP
.B EPERM
-\fBIPC_SET\fP ¤« \fBIPC_RMID\fP ¤¬»î¤ß¤é¤ì¡¢
-¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú¥æ¡¼¥¶¡¼ ID ¤¬ºîÀ®¼Ô
+\fBIPC_SET\fP か \fBIPC_RMID\fP が試みられ、
+呼び出したプロセスの実効ユーザー ID が作成者
.RI ( shm_perm.cuid )
-¤Ç¤â½êͼÔ
+でも所有者
.RI ( shm_perm.uid )
-¤Ç¤â¤Ê¤¯¡¢¥×¥í¥»¥¹¤¬Æø¢¤ò»ý¤¿¤Ê¤¤ (Linux ¤Ç¤Ï
+でもなく、プロセスが特権を持たない (Linux では
.B CAP_SYS_ADMIN
-¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤¿¤Ê¤¤)¡£
+ケーパビリティを持たない)。
-¤Þ¤¿¤Ï (2.6.9 ¤è¤êÁ°¤Î¥«¡¼¥Í¥ë¤Ç)
+または (2.6.9 より前のカーネルで)
.B SHM_LOCK
-¤Þ¤¿¤Ï
+または
.B SHM_UNLOCK
-¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤¬¡¢¥×¥í¥»¥¹¤¬Æø¢¤ò»ý¤¿¤Ê¤¤
-(Linux ¤Ç¤Ï
+が指定されているが、プロセスが特権を持たない
+(Linux では
.B CAP_IPC_LOCK
-¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤¿¤Ê¤¤)¡£
-(Linux 2.6.9 °Ê¹ß¤Ç¤Ï¡¢
+ケーパビリティを持たない)。
+(Linux 2.6.9 以降では、
.B RLIMIT_MEMLOCK
-¤¬ 0 ¤Ç¸Æ¤Ó½Ð¤·¸µ¤¬Æø¢¤ò»ý¤¿¤Ê¤¤¾ì¹ç¤Ë¤â¡¢¤³¤Î¥¨¥é¡¼¤¬µ¯¤³¤ë¡£)
-.SH ½àµò
+が 0 で呼び出し元が特権を持たない場合にも、このエラーが起こる。)
+.SH 準拠
SVr4, POSIX.1-2001.
-.\" SVr4 ¤Ë¤Ï¾¤Ë EINVAL, ENOENT, ENOSPC, ENOMEM,
-.\" EEXIST ¥¨¥é¡¼¤Ë¤Ä¤¤¤Æ¤Îµ½Ò¤¬¤¢¤ë¡£
-.\" SVr4 ¤ª¤è¤Ó SVID ¤Ë¤Ï EIDRM ¥¨¥é¡¼¤Ë¤Ä¤¤¤Æ¤Îµ½Ò¤Ï¤Ê¤¤¡£
-.SH Ãí°Õ
+.\" SVr4 には他に EINVAL, ENOENT, ENOSPC, ENOMEM,
+.\" EEXIST エラーについての記述がある。
+.\" SVr4 および SVID には EIDRM エラーについての記述はない。
+.SH 注意
.BR IPC_INFO ,
.BR SHM_STAT ,
.B SHM_INFO
-Áàºî¤Ï¡¢
+操作は、
.BR ipcs (1)
-¥×¥í¥°¥é¥à¤Ç³ä¤êÅö¤ÆºÑ¤Î»ñ¸»¤Ë´Ø¤¹¤ë¾ðÊó¤òÄ󶡤¹¤ë¤¿¤á¤Ë
-»ÈÍѤµ¤ì¤Æ¤¤¤ë¡£¾Íè¡¢¤³¤ì¤é¤ÎÁàºî¤ÏÊѹ¹¤µ¤ì¤¿¤ê¡¢
-/proc ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ë°ÜÆ°¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£
+プログラムで割り当て済の資源に関する情報を提供するために
+使用されている。将来、これらの操作は変更されたり、
+/proc ファイルシステムのインタフェースに移動されるかもしれない。
-Linux ¤Ç¤Ï¡¢
+Linux では、
.I shmctl(IPC_RMID)
-¤ò»È¤Ã¤Æ¤¹¤Ç¤Ëºï½ü¥Þ¡¼¥¯¤¬¤Ä¤±¤é¤ì¤Æ¤¤¤ë¶¦Í¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ò
-¤¢¤ë¥×¥í¥»¥¹¤¬Éղà (attach)
+を使ってすでに削除マークがつけられている共有メモリ・セグメントを
+あるプロセスが付加 (attach)
.RB ( shmat (2))
-¤¹¤ë¤³¤È¤òµö²Ä¤·¤Æ¤¤¤ë¡£
-¤³¤Îµ¡Ç½¤Ï¾¤Î UNIX ¤Î¼ÂÁõ¤Ç¤ÏÍøÍѤǤ¤Ê¤¤¡£
-°Ü¿¢À¤ò¹Íθ¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¤³¤ì¤Ë°Í¸¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤Ù¤¤Ç¤¢¤ë¡£
+することを許可している。
+この機能は他の UNIX の実装では利用できない。
+移植性を考慮したアプリケーションではこれに依存しないようにすべきである。
-\fI¹½Â¤ÂÎ shmid_ds\fP Æâ¤Î¿¤¯¤Î¥Õ¥£¡¼¥ë¥É¤Ï¡¢
-Linux 2.2 ¤Ç¤Ï
+\fI構造体 shmid_ds\fP 内の多くのフィールドは、
+Linux 2.2 では
.I short
-·¿¤À¤Ã¤¿¤¬¡¢Linux 2.4 ¤Ç¤Ï
+型だったが、Linux 2.4 では
.I long
-·¿¤Ë¤Ê¤Ã¤¿¡£
-¤³¤ÎÍøÅÀ¤òÀ¸¤«¤¹¤Ë¤Ï¡¢glibc-2.1.91 °Ê¹ß¤Î´Ä¶²¼¤Ç
-ºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ì¤Ð½½Ê¬¤Ç¤¢¤ë¡£
-¥«¡¼¥Í¥ë¤Ï¿·¤·¤¤·Á¼°¤Î¸Æ¤Ó½Ð¤·¤È¸Å¤¤·Á¼°¤Î¸Æ¤Ó½Ð¤·¤ò
+型になった。
+この利点を生かすには、glibc-2.1.91 以降の環境下で
+再コンパイルすれば十分である。
+カーネルは新しい形式の呼び出しと古い形式の呼び出しを
.I cmd
-Æâ¤Î
+内の
.B IPC_64
-¥Õ¥é¥°¤Ç¶èÊ̤¹¤ë¡£
-.SH ´ØÏ¢¹àÌÜ
+フラグで区別する。
+.SH 関連項目
.BR mlock (2),
.BR setrlimit (2),
.BR shmget (2),