.\"
.TH SHMGET 2 2015\-01\-10 Linux "Linux Programmer's Manual"
.SH 名前
-shmget \- System V å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントを割り当てる
+shmget \- System V å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントを割り当てる
.SH 書式
.ad l
\fB#include <sys/ipc.h>\fP
\fBint shmget(key_t \fP\fIkey\fP\fB, size_t \fP\fIsize\fP\fB, int \fP\fIshmflg\fP\fB);\fP
.ad b
.SH 説明
-\fBshmget\fP() ã\81¯ \fIkey\fP å¼\95ã\81\8dæ\95°ã\81«å¯¾å¿\9cã\81\99ã\82\8b System\ V å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントの識別子を返す。 \fIkey\fP の値が
-\fBIPC_PRIVATE\fP ã\81®å ´å\90\88ã\80\81ã\82\82ã\81\97ã\81\8fã\81¯ \fIkey\fP ã\81«å¯¾å¿\9cã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントが存在せず、 \fIshmflg\fP に
-\fBIPC_CREAT\fP ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81\9få ´å\90\88ã\80\81 æ\96°ã\81\97ã\81\84å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\80\82 ä½\9cæ\88\90ã\81\95ã\82\8cã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントは、 \fIsize\fP
+\fBshmget\fP() ã\81¯ \fIkey\fP å¼\95ã\81\8dæ\95°ã\81«å¯¾å¿\9cã\81\99ã\82\8b System\ V å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントの識別子を返す。 \fIkey\fP の値が
+\fBIPC_PRIVATE\fP ã\81®å ´å\90\88ã\80\81ã\82\82ã\81\97ã\81\8fã\81¯ \fIkey\fP ã\81«å¯¾å¿\9cã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントが存在せず、 \fIshmflg\fP に
+\fBIPC_CREAT\fP ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81\9få ´å\90\88ã\80\81 æ\96°ã\81\97ã\81\84å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\80\82 ä½\9cæ\88\90ã\81\95ã\82\8cã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントは、 \fIsize\fP
引き数の値を \fBPAGE_SIZE\fP の倍数へと切り上げた (round up) 大きさとなる。
.PP
\fIshmflg\fP に \fBIPC_CREAT\fP と \fBIPC_EXCL\fP の両方が指定された場合、 \fIkey\fP
-ã\81«å¯¾å¿\9cã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントが既に存在すると、 \fBshmget\fP() は失敗し、 \fIerrno\fP に \fBEEXIST\fP が設定される
+ã\81«å¯¾å¿\9cã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントが既に存在すると、 \fBshmget\fP() は失敗し、 \fIerrno\fP に \fBEEXIST\fP が設定される
(これは \fBopen\fP(2) に \fBO_CREAT | O_EXCL\fP を指定した場合の動作と同じである)。
.PP
\fIshmflg\fP は以下の内容から構成される:
.TP 12
\fBIPC_CREAT\fP
新しいセグメントを作成する。このフラグが指定されなかった場合、 \fBshmget\fP() は \fIkey\fP に対応するセグメントを探し、
-ユーザがそのセグメントにアクセスする許可があるかどうかをチェックする。
+ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8cã\81\9dã\81®ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81«ã\82¢ã\82¯ã\82»ã\82¹ã\81\99ã\82\8b許å\8f¯ã\81\8cã\81\82ã\82\8bã\81\8bã\81©ã\81\86ã\81\8bã\82\92ã\83\81ã\82§ã\83\83ã\82¯ã\81\99ã\82\8bã\80\82
.TP
\fBIPC_EXCL\fP
このフラグは \fBIPC_CREAT\fP とともに使用し、 この呼び出しで確実にセグメントが作成されるようにする。 セグメントが既に存在した場合には、
.\" specified.
このフラグは、 \fBmmap\fP(2) の \fBMAP_NORESERVE\fP フラグと同じ役割を果たす。
このセグメントに対するスワップ空間の予約を行わない。 スワップ空間を予約した場合は、そのセグメントの変更が必ず成功することが
-保証される。スワップ空間の予約を行わなかった場合は、物理メモリに空きが ないと書き込み時に \fBSIGSEGV\fP を受け取る可能性がある。
+ä¿\9d証ã\81\95ã\82\8cã\82\8bã\80\82ã\82¹ã\83¯ã\83\83ã\83\97空é\96\93ã\81®äº\88ç´\84ã\82\92è¡\8cã\82\8fã\81ªã\81\8bã\81£ã\81\9få ´å\90\88ã\81¯ã\80\81ç\89©ç\90\86ã\83¡ã\83¢ã\83ªã\83¼ã\81«ç©ºã\81\8dã\81\8c ã\81ªã\81\84ã\81¨æ\9b¸ã\81\8dè¾¼ã\81¿æ\99\82ã\81« \fBSIGSEGV\fP ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8bå\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8bã\80\82
\fBproc\fP(5) にある \fI/proc/sys/vm/overcommit_memory\fP ファイルに関する議論も参照のこと。
.PP
上記のフラグに加えて、 \fIshmflg\fP の下位 9 ビットは、所有者、グループ、その他への許可を指定する。 これらのビットは \fBopen\fP(2)
の \fImode\fP 引き数と同じ形式で同じ意味を持つ。 今のところ、システムは実行 (execute) 許可を参照しない。
.PP
-å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81\8cæ\96°ã\81\9fã\81«ä½\9cæ\88\90ã\81\95ã\82\8cã\82\8bé\9a\9bã\80\81 å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントの内容は 0 で初期化され、 関連情報を保持するデータ構造体 \fIshmid_ds\fP
+å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81\8cæ\96°ã\81\9fã\81«ä½\9cæ\88\90ã\81\95ã\82\8cã\82\8bé\9a\9bã\80\81 å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントの内容は 0 で初期化され、 関連情報を保持するデータ構造体 \fIshmid_ds\fP
は以下のように初期化される。
.IP
\fIshm_perm.cuid\fP と \fIshm_perm.uid\fP に呼び出し元プロセスの実効 (effective) ユーザーID を設定する。
.IP
\fIshm_ctime\fP に現在の時刻を設定する。
.PP
-å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントが既に存在する場合、アクセス許可の検査と、 破壊 (destruction) マークがつけられていないかのチェックが行われる。
+å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントが既に存在する場合、アクセス許可の検査と、 破壊 (destruction) マークがつけられていないかのチェックが行われる。
.SH 返り値
-æ\88\90å\8a\9fã\81®å ´å\90\88ã\80\81æ\9c\89å\8a¹ã\81ªå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントの識別子が返される。 エラーの場合、 \-1 が返り、 \fIerrno\fP にエラーを示す値が設定される。
+æ\88\90å\8a\9fã\81®å ´å\90\88ã\80\81æ\9c\89å\8a¹ã\81ªå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントの識別子が返される。 エラーの場合、 \-1 が返り、 \fIerrno\fP にエラーを示す値が設定される。
.SH エラー
失敗した場合は \fIerrno\fP が以下のどれかに設定される:
.TP
\fBEACCES\fP
-ã\83¦ã\83¼ã\82¶ã\83¼ã\81¯ã\81\9dã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントへのアクセス許可を持たず、 \fBCAP_IPC_OWNER\fP ケーパビリティも持っていない。
+ã\83¦ã\83¼ã\82¶ã\83¼ã\81¯ã\81\9dã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントへのアクセス許可を持たず、 \fBCAP_IPC_OWNER\fP ケーパビリティも持っていない。
.TP
\fBEEXIST\fP
\fBIPC_CREAT\fP と \fBIPC_EXCL\fP が \fIshmflg\fP に指定されたが、 \fIkey\fP
-に対応する共有メモリセグメントはすでに存在する。
+ã\81«å¯¾å¿\9cã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81¯ã\81\99ã\81§ã\81«å\98å\9c¨ã\81\99ã\82\8bã\80\82
.TP
\fBEINVAL\fP
新しいセグメントを作成しようとしたが、 \fIsize\fP が \fBSHMMIN\fP より小さいか \fBSHMMAX\fP よりも大きかった。
指定された \fIkey\fP に対応するセグメントが存在せず、 \fBIPC_CREAT\fP も指定されていなかった。
.TP
\fBENOMEM\fP
-セグメントの管理情報 (overhead) に割り当てるメモリがなかった。
+ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81®ç®¡ç\90\86æ\83\85å ± (overhead) ã\81«å\89²ã\82\8aå½\93ã\81¦ã\82\8bã\83¡ã\83¢ã\83ªã\83¼ã\81\8cã\81ªã\81\8bã\81£ã\81\9fã\80\82
.TP
\fBENOSPC\fP
-ã\82·ã\82¹ã\83\86ã\83 å\85¨ä½\93ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメント数の制限 (\fBSHMMNI\fP) に達した、または要求された \fIsize\fP のセグメントの割り当てが
-システム全体の共有メモリサイズの制限 (\fBSHMALL\fP) を超過した。
+ã\82·ã\82¹ã\83\86ã\83 å\85¨ä½\93ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメント数の制限 (\fBSHMMNI\fP) に達した、または要求された \fIsize\fP のセグメントの割り当てが
+ã\82·ã\82¹ã\83\86ã\83 å\85¨ä½\93ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82µã\82¤ã\82ºã\81®å\88¶é\99\90 (\fBSHMALL\fP) ã\82\92è¶\85é\81\8eã\81\97ã\81\9fã\80\82
.TP
\fBEPERM\fP
\fBSHM_HUGETLB\fP フラグが指定されたが、呼び出し元には権限がなかった (\fBCAP_IPC_LOCK\fP ケーパビリティを持っていなかった)。
.\" Like Linux, the FreeBSD man pages still document
.\" the inclusion of these header files.
Linux や POSIX の全てのバージョンでは、 \fI<sys/types.h>\fP と \fI<sys/ipc.h>\fP
-のインクルードは必要ない。しかしながら、いくつかの古い実装ではこれらのヘッダファイルのインクルードが必要であり、 SVID
+ã\81®ã\82¤ã\83³ã\82¯ã\83«ã\83¼ã\83\89ã\81¯å¿\85è¦\81ã\81ªã\81\84ã\80\82ã\81\97ã\81\8bã\81\97ã\81ªã\81\8cã\82\89ã\80\81ã\81\84ã\81\8fã\81¤ã\81\8bã\81®å\8f¤ã\81\84å®\9fè£\85ã\81§ã\81¯ã\81\93ã\82\8cã\82\89ã\81®ã\83\98ã\83\83ã\83\80ã\83¼ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¤ã\83³ã\82¯ã\83«ã\83¼ã\83\89ã\81\8cå¿\85è¦\81ã\81§ã\81\82ã\82\8aã\80\81 SVID
でもこれらのインクルードをするように記載されている。このような古いシステムへの移植性を意図したアプリケーションではこれらのファイルをインクルードする必要があるかもしれない。
.\"
\fBIPC_PRIVATE\fP はフラグではなく \fIkey_t\fP 型である。 この特別な値が \fIkey\fP に使用された場合は、 \fBshmget\fP()
-ã\81¯ \fIshmflg\fP ã\81®ä¸\8bä½\8d 9 ã\83\93ã\83\83ã\83\88ã\82\92é\99¤ã\81\84ã\81\9få\85¨ã\81¦ã\82\92ç\84¡è¦\96ã\81\97ã\80\81 æ\96°ã\81\97ã\81\84å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントを作成する。
-.SS 共有メモリの上限
-\fBshmget\fP() ã\82³ã\83¼ã\83«ã\81«å½±é\9f¿ã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメント資源の制限は以下の通りである:
+ã\81¯ \fIshmflg\fP ã\81®ä¸\8bä½\8d 9 ã\83\93ã\83\83ã\83\88ã\82\92é\99¤ã\81\84ã\81\9få\85¨ã\81¦ã\82\92ç\84¡è¦\96ã\81\97ã\80\81 æ\96°ã\81\97ã\81\84å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントを作成する。
+.SS å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\81®ä¸\8aé\99\90
+\fBshmget\fP() ã\82³ã\83¼ã\83«ã\81«å½±é\9f¿ã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメント資源の制限は以下の通りである:
.TP
\fBSHMALL\fP
-共有メモリの全使用量のシステム全体での上限値。 システムページサイズが単位である。
+å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\81®å\85¨ä½¿ç\94¨é\87\8fã\81®ã\82·ã\82¹ã\83\86ã\83 å\85¨ä½\93ã\81§ã\81®ä¸\8aé\99\90å\80¤ã\80\82 ã\82·ã\82¹ã\83\86ã\83 ã\83\9aã\83¼ã\82¸ã\82µã\82¤ã\82ºã\81\8cå\8d\98ä½\8dã\81§ã\81\82ã\82\8bã\80\82
.\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31
Linux では、この上限値は \fI/proc/sys/kernel/shmall\fP 経由で参照したり、変更したりできる。 Linux 3.16
SHMMAX / PAGE_SIZE * (SHMMNI / 16)
\fBSHMMAX\fP と \fBSHMMNI\fP が変更されないとすると、 この式の結果に (バイト単位の値を得るために) ページサイズを掛け算すると、
-å\85¨ã\81¦ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81§ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bå\85¨ã\83¡ã\83¢ã\83ªの上限として、 8 GB という値が得られる。
+å\85¨ã\81¦ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81§ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bå\85¨ã\83¡ã\83¢ã\83ªã\83¼の上限として、 8 GB という値が得られる。
.TP
\fBSHMMAX\fP
-1 つの共有メモリセグメントの最大サイズ (バイト数)。
+1 ã\81¤ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\81®æ\9c\80大ã\82µã\82¤ã\82º (ã\83\90ã\82¤ã\83\88æ\95°)ã\80\82
.\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31
Linux では、この上限値は \fI/proc/sys/kernel/shmmax\fP 経由で参照したり、変更したりできる。 Linux 3.16
Linux 2.2 から Linux 3.15 までは、この上限値のデフォルト値は 0x2000000 (32MB) であった。
-共有メモリセグメントの一部分だけをマッピングすることはできないので、 使用可能なセグメントの最大サイズには仮想メモリの総量という別の上限が適用される。
-例えば、i386 ではマッピング可能な最大セグメントの大きさはおおよそ 2.8GB で、 x86_64 では上限はおおよそ 127TB である。
+共有メモリーセグメントの一部分だけをマッピングすることはできないので、
+使用可能なセグメントの最大サイズには仮想メモリーの総量という別の上限が適用される。 例えば、i386
+ではマッピング可能な最大セグメントの大きさはおおよそ 2.8GB で、 x86_64 では上限はおおよそ 127TB である。
.TP
\fBSHMMIN\fP
-å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントのバイト単位の大きさの下限: 実装依存 (現在は 1 バイトだが、実質的な最小サイズは \fBPAGE_SIZE\fP である)。
+å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントのバイト単位の大きさの下限: 実装依存 (現在は 1 バイトだが、実質的な最小サイズは \fBPAGE_SIZE\fP である)。
.TP
\fBSHMMNI\fP
-ã\82·ã\82¹ã\83\86ã\83 å\85¨ä½\93ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメント数の上限値。 この上限値のデフォルトは、 Linux 2.2 以降では 128、 Linux 2.4 以降で
+ã\82·ã\82¹ã\83\86ã\83 å\85¨ä½\93ã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメント数の上限値。 この上限値のデフォルトは、 Linux 2.2 以降では 128、 Linux 2.4 以降で
4096 である。
.\" Kernels between 2.4.x and 2.6.8 had an off-by-one error that meant
.\" This /proc file is not available in Linux 2.2 and earlier -- MTK
Linux では、この上限値は \fI/proc/sys/kernel/shmmni\fP 経由で参照したり、変更したりできる。
.PP
-ã\83\97ã\83ã\82»ã\82¹å½\93ã\82\8aã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントの個数の最大値 (\fBSHMSEG\fP) に関する実装上の制限はない。
+ã\83\97ã\83ã\82»ã\82¹å½\93ã\82\8aã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントの個数の最大値 (\fBSHMSEG\fP) に関する実装上の制限はない。
.SS "Linux での注意"
-ã\83\90ã\83¼ã\82¸ã\83§ã\83³ 2.3.30 ã\81¾ã\81§ã\81¯ã\80\81Linux ã\81¯ å\89\8aé\99¤ã\81\8cäº\88å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントに対して \fBshmget\fP() が行われると
+ã\83\90ã\83¼ã\82¸ã\83§ã\83³ 2.3.30 ã\81¾ã\81§ã\81¯ã\80\81Linux ã\81¯ å\89\8aé\99¤ã\81\8cäº\88å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントに対して \fBshmget\fP() が行われると
\fBEIDRM\fP を返していた。
.SH バグ
\fBIPC_PRIVATE\fP という名前を選んだのはおそらく失敗であろう。 \fBIPC_NEW\fP の方がより明確にその機能を表しているだろう。