OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man2 / shmop.2
index a5c0f16..5586c27 100644 (file)
 .\"            of segments marked for destruction
 .\"
 .\" FIXME . Add an example program to this page.
-.\" FIXME Linux 2.6.9 added SHM_EXEC, which should be documented
+.\"
 .\"*******************************************************************
 .\"
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH SHMOP 2 2013\-02\-12 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated 1999-08-15, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated & Modified 2002-05-07, Yuichi SATO <ysato@h4.dion.ne.jp>
+.\" Updated & Modified 2003-01-18, Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated & Modified 2005-01-07, Yuichi SATO
+.\" Updated 2005-12-05, Akihiro MOTOKI, Catch up to LDP man-pages 2.16
+.\" Updated 2006-04-14, Akihiro MOTOKI, Catch up to LDP man-pages 2.29
+.\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-07-24, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH SHMOP 2 2014\-07\-08 Linux "Linux Programmer's Manual"
 .SH 名前
-shmat, shmdt \- 共有メモリ (shared memory) の操作
+shmat, shmdt \- System V 共有メモリー (shared memory) の操作
 .SH 書式
 .nf
 \fB#include <sys/types.h>\fP
@@ -56,55 +69,58 @@ shmat, shmdt \- 共有メモリ (shared memory) の操作
 \fBint shmdt(const void *\fP\fIshmaddr\fP\fB);\fP
 .fi
 .SH 説明
-\fBshmat\fP()  は \fIshmid\fP で指定された共有メモリ・セグメント (shared memory segment) を
-コールしたプロセスのアドレス空間に付加 (attach) する。 付加するアドレスは \fIshmaddr\fP に以下のどれかの形式で指定する:
-.LP
+.SS shmat()
+\fBshmat\fP()  は \fIshmid\fP で指定された System\ V 共有メモリーセグメント (shared memory segment)
+を コールしたプロセスのアドレス空間に付加 (attach) する。 付加するアドレスは \fIshmaddr\fP に以下のどれかの形式で指定する:
+.IP * 3
 \fIshmaddr\fP が NULL ならば、システムはセグメントを付加するための 適切な (使用されていない) アドレスを選択する。
-.LP
+.IP *
 \fIshmaddr\fP が NULL でなく \fBSHM_RND\fP が \fIshmflg\fP に指定されている場合は、 \fIshmaddr\fP を
-\fBSHMLBA\fP の倍数へと切り捨てた (rounding down) のと等しいアドレスへ付加する。 その他の場合は \fIshmaddr\fP
-は付加を行なうアドレスで、ページ境界を指している必要がある。
+\fBSHMLBA\fP の倍数へと切り捨てた (rounding down) のと等しいアドレスへ付加する。
+.IP *
+その他の場合は \fIshmaddr\fP は付加を行なうアドレスで、ページ境界を指している必要がある。
 .PP
-\fBSHM_RDONLY\fP が \fIshmflg\fP に指定されていた場合は、 セグメントは読み込み専用に付加され、プロセスはそのセグメントへの
-読み込み許可を持たなければならない。 そうでなければそのセグメントは読み込みと書き込みのために付加され、
-プロセスはそのセグメントに読み込みと書き込みの許可を持つ必要がある。 書き込み専用の共有メモリ・セグメントという概念は存在しない。
-.PP
-(Linux 特有の)  \fBSHM_REMAP\fP フラグが \fIshmflg\fP に指定された場合は、
-セグメントのマッピングを既存のマッピングに置き換える。 マッピングの範囲は、 \fIshmaddr\fP から始まりセグメントのサイズ分だけある (通常
-\fBEINVAL\fP エラーは、このアドレス範囲にマッピングが既に存在するために起る)。 このフラグを指定する場合は、 \fIshmaddr\fP が NULL
-であってはならない。
+\fBSHM_RND\fP に加えて、以下のフラグを \fIshmflg\fP ビットマスク引き数に指定できる。
+.TP 
+\fBSHM_EXEC\fP (Linux 固有; Linux 2.6.9 以降)
+セグメントの内容を実行できる。 呼び出し元はセグメントに対する実行許可を持っていなければならない。
+.TP 
+\fBSHM_RDONLY\fP
+セグメントを読み込み専用に付加する。 プロセスはそのセグメントへの読み込み許可を持っていなければならない。
+このフラグが指定されなかった場合、そのセグメントは読み込みと書き込みアクセスのために付加され、
+プロセスはそのセグメントに読み込みと書き込みの許可を持っていなければならない。 書き込み専用の共有メモリーセグメントという概念は存在しない。
+.TP 
+\fBSHM_REMAP\fP (Linux 固有)
+このフラグは、 セグメントのマッピングを既存のマッピングに置き換えることを指示する。 マッピングの範囲は、 \fIshmaddr\fP
+から始まりセグメントのサイズ分だけある (通常 \fBEINVAL\fP エラーは、このアドレス範囲にマッピングが既に存在するために起る)。
+このフラグを指定する場合は、 \fIshmaddr\fP が NULL であってはならない。
 .PP
 呼び出したプロセスの \fBbrk\fP(2)  の値は付加によって変化しない。 そのセグメントはプロセスが終了 (exit) したら自動的に分離
 (detach) される。 同じセグメントをプロセスのアドレス空間に、読み込み専用および読み書き両用 として付加でき、また複数回付加することもできる。
 .PP
\88\90å\8a\9fã\81\97ã\81\9f \fBshmat\fP()  ã\82³ã\83¼ã\83«ã\81¯å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントに関連する \fIshmid_ds\fP 構造体 (\fBshmctl\fP(2)  を参照)
\88\90å\8a\9fã\81\97ã\81\9f \fBshmat\fP()  ã\82³ã\83¼ã\83«ã\81¯å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントに関連する \fIshmid_ds\fP 構造体 (\fBshmctl\fP(2)  を参照)
 のメンバーを以下のように更新する:
 .IP
 \fIshm_atime\fP には現在の時刻を設定する。
 .IP
 \fIshm_lpid\fP には呼び出したプロセスのプロセス ID が設定される。
 .IP
+.\"
 \fIshm_nattch\fP を 1 増加させる。
-.PP
-\fBshmdt\fP()  ã\81¯å\91¼ã\81³å\87ºã\81\97ã\81\9fã\83\97ã\83­ã\82»ã\82¹ã\81®ã\82¢ã\83\89ã\83¬ã\82¹ç©ºé\96\93ã\81\8bã\82\89 \fIshmaddr\fP ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\82¢ã\83\89ã\83¬ã\82¹ã\81«é\85\8dç½®ã\81\95ã\82\8cã\81\9få\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントを分離
-(detach) ã\81\99ã\82\8bã\80\82 å\88\86é\9b¢ã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントは、現在 \fIshmaddr\fP に付加されているものでなければならない。 \fIshmaddr\fP
+.SS shmdt()
+\fBshmdt\fP()  ã\81¯å\91¼ã\81³å\87ºã\81\97ã\81\9fã\83\97ã\83­ã\82»ã\82¹ã\81®ã\82¢ã\83\89ã\83¬ã\82¹ç©ºé\96\93ã\81\8bã\82\89 \fIshmaddr\fP ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\82¢ã\83\89ã\83¬ã\82¹ã\81«é\85\8dç½®ã\81\95ã\82\8cã\81\9få\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントを分離
+(detach) ã\81\99ã\82\8bã\80\82 å\88\86é\9b¢ã\81\99ã\82\8bå\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントは、現在 \fIshmaddr\fP に付加されているものでなければならない。 \fIshmaddr\fP
 は、それを付加した時に \fBshmat\fP()  が返した値に等しくなければならない。
 .PP
\88\90å\8a\9fã\81\97ã\81\9f \fBshmdt\fP()  ã\82³ã\83¼ã\83«ã\81¯ã\81\9dã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントに関連する \fIshmid_ds\fP 構造体のメンバーを以下のように更新する:
\88\90å\8a\9fã\81\97ã\81\9f \fBshmdt\fP()  ã\82³ã\83¼ã\83«ã\81¯ã\81\9dã\81®å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントに関連する \fIshmid_ds\fP 構造体のメンバーを以下のように更新する:
 .IP
 \fIshm_dtime\fP には現在の時刻が設定される。
 .IP
 \fIshm_lpid\fP には呼び出したプロセスのプロセス ID が設定される。
 .IP
 \fIshm_nattch\fP を 1 減少させる。 もし 0 になり、削除マークがあった場合は そのセグメントは削除される。
-.PP
-\fBfork\fP(2)  した後、子プロセスは付加された共有メモリ・セグメントを継承する。
-
-\fBexec\fP(2)  した後、全ての付加された共有メモリ・セグメントはプロセスから分離される。
-
-\fBexit\fP(2)  において、全ての付加された共有メモリ・セグメントはプロセスから分離される。
 .SH 返り値
-\fBshmat\fP()  ã\81¯ã\80\81æ\88\90å\8a\9fã\81\97ã\81\9få ´å\90\88ã\80\81 ä»\98å\8a ã\81\95ã\82\8cã\81\9få\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントのアドレスを返す。 エラーの場合、 \fI(void\ *)\ \-1\fP
+\fBshmat\fP()  ã\81¯ã\80\81æ\88\90å\8a\9fã\81\97ã\81\9få ´å\90\88ã\80\81 ä»\98å\8a ã\81\95ã\82\8cã\81\9få\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントのアドレスを返す。 エラーの場合、 \fI(void\ *)\ \-1\fP
 を返し、 \fIerrno\fP にエラーの原因を示す値を設定する。
 
 \fBshmdt\fP()  は、成功すると 0 を返す。 エラーの場合、\-1 を返し、 \fIerrno\fP にエラーの原因を示す値を設定する。
@@ -123,43 +139,49 @@ shmat, shmdt \- 共有メモリ (shared memory) の操作
 \fBSHM_REMAP\fP が指定されているが、 \fIshmaddr\fP が NULL であった。
 .TP 
 \fBENOMEM\fP
\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ (descriptor) ã\82\84ã\83\9aã\83¼ã\82¸ã\83»ã\83\86ã\83¼ã\83\96ã\83«ã\81®ã\81\9fã\82\81ã\81®ã\83¡ã\83¢ã\83ªを 割り当てることができない。
\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ (descriptor) ã\82\84ã\83\9aã\83¼ã\82¸ã\83\86ã\83¼ã\83\96ã\83«ã\81®ã\81\9fã\82\81ã\81®ã\83¡ã\83¢ã\83ªã\83¼を 割り当てることができない。
 .PP
 \fBshmdt\fP()  が失敗した場合、 \fBEINVAL\fP は以下のようにセットされる:
 .TP 
 \fBEINVAL\fP
 .\" The following since 2.6.17-rc1:
-\fIshmaddr\fP ã\81«ä»\98å\8a ã\81\95ã\82\8cã\81\9få\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントが存在しない。 もしくは、 \fIshmaddr\fP がページ境界に合っていない。
+\fIshmaddr\fP ã\81«ä»\98å\8a ã\81\95ã\82\8cã\81\9få\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントが存在しない。 もしくは、 \fIshmaddr\fP がページ境界に合っていない。
 .SH 準拠
 .\" SVr4 documents an additional error condition EMFILE.
 SVr4, POSIX.1\-2001.
 
-SVID 3 で (たぶんそれより前だと思うが)  \fIshmaddr\fP 引き数の型は \fIchar *\fP から \fIconst void *\fP
-に、\fIshmat\fP() の返り値の型は \fIchar *\fP から \fIvoid *\fP に変更された (Linux では libc4 と libc5
-のプロトタイプは \fIchar *\fP であり、glibc2 のプロトタイプは \fIvoid *\fP である)。
+SVID 3 で (たぶんそれより前だと思うが)  \fIshmaddr\fP 引き数の型は \fIchar\ *\fP から \fIconst void\ *\fP
+に、\fIshmat\fP() の返り値の型は \fIchar\ *\fP から \fIvoid\ *\fP に変更された。
 .SH 注意
-共有メモリセグメントを付加する場合の移植性の高い方法としては、 \fIshmaddr\fP を NULL にして \fBshmat\fP()  を使用するのがよい。
-このような方法で付加される共有メモリセグメントは、 プロセスが異なれば別のアドレスに付加される、という点に注意すること。
-よって共有メモリ内で管理されるポインタは、 絶対アドレスではなく、 (一般的にはセグメントの開始アドレスからの)  相対アドレスで作成するべきである。
 .PP
-Linux では共有メモリセグメントに既に削除マークが付けられていても、 その共有メモリセグメントを付加することができる。 しかし
+\fBfork\fP(2)  した後、子プロセスは付加された共有メモリーセグメントを継承する。
+
+\fBexec\fP(2)  した後、全ての付加された共有メモリーセグメントはプロセスから分離される。
+
+\fBexit\fP(2)  において、全ての付加された共有メモリーセグメントはプロセスから分離される。
+
+共有メモリーセグメントを付加する場合の移植性の高い方法としては、 \fIshmaddr\fP を NULL にして \fBshmat\fP()
+を使用するのがよい。 このような方法で付加される共有メモリーセグメントは、 プロセスが異なれば別のアドレスに付加される、という点に注意すること。
+よって共有メモリー内で管理されるポインターは、 絶対アドレスではなく、 (一般的にはセグメントの開始アドレスからの)
+相対アドレスで作成するべきである。
+.PP
+Linux では共有メモリーセグメントに既に削除マークが付けられていても、 その共有メモリーセグメントを付加することができる。 しかし
 POSIX.1\-2001 ではこのような動作を指定しておらず、 他の多くの実装もこれをサポートしていない。
 .LP
-以ä¸\8bã\81®ã\82·ã\82¹ã\83\86ã\83 ã\83»ã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\83¼ã\81¯ã\80\81 \fBshmat\fP()  ã\81«å½±é\9f¿ã\81\99ã\82\8b:
+以下のシステムパラメーターは、 \fBshmat\fP()  に影響する:
 .TP 
-.\" FIXME A good explanation of the rationale for the existence
-.\" of SHMLBA would be useful here
 \fBSHMLBA\fP
-.\" FIXME That last sentence isn't true for all Linux
-.\" architectures (i.e., SHMLBA != PAGE_SIZE for some architectures)
-.\" -- MTK, Nov 04
-セグメントの境界アドレスの最小倍数。ページ境界に合ってなければならない。 現在の実装では \fBSHMLBA\fP の値は \fBPAGE_SIZE\fP である。
+セグメントの下限アドレス倍数 (Segment low boundary address multiple)。 \fBshmat\fP()
+の呼び出しにおいて付加するアドレスを明示的に指定する際、 呼び出し元は指定するアドレスがこの値の倍数になるように保証しなければならない。
+これはいくつかのアーキテクチャーでは必要なことで、 CPU キャッシュの性能を保証するためであったり、 同じセグメントの別の付与を CPU
+キャッシュ内部で一貫して扱えるようにするためだったりする。 \fBSHMLBA\fP は通常はシステムページサイズの倍数である (Linux
+の多くのアーキテクチャーではシステムページサイズと同じである)。
 .PP
\8f¾å\9c¨ã\81®å®\9fè£\85ã\81§ã\81¯ã\80\81ã\83\97ã\83­ã\82»ã\82¹ã\81\94ã\81¨ã\81® å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83»セグメントの最大数 (\fBSHMSEG\fP)  に関する実装依存の制限はない。
\8f¾å\9c¨ã\81®å®\9fè£\85ã\81§ã\81¯ã\80\81ã\83\97ã\83­ã\82»ã\82¹ã\81\94ã\81¨ã\81® å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼セグメントの最大数 (\fBSHMSEG\fP)  に関する実装依存の制限はない。
 .SH 関連項目
 \fBbrk\fP(2), \fBmmap\fP(2), \fBshmctl\fP(2), \fBshmget\fP(2), \fBcapabilities\fP(7),
 \fBshm_overview\fP(7), \fBsvipc\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。