X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=release%2Fman3%2Fshm_open.3;h=131a36baf25fafd4c76f538e67b68958af57fdc9;hb=c1dfa2f6ab1bbed84992d3c59ee9925f4d453668;hp=b9d16df5e94d999acc7f41528380262856ba7e2b;hpb=7e089fcc022461849bbc09437103cc337a88dd9c;p=linuxjm%2FLDP_man-pages.git diff --git a/release/man3/shm_open.3 b/release/man3/shm_open.3 index b9d16df5..131a36ba 100644 --- a/release/man3/shm_open.3 +++ b/release/man3/shm_open.3 @@ -1,7 +1,6 @@ -.\" Hey Emacs! This file is -*- nroff -*- source. -.\" .\" Copyright (C) 2002 Michael Kerrisk .\" +.\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. @@ -21,268 +20,143 @@ .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END .\" .\" FIXME . Add an example to this page +.\"******************************************************************* .\" -.\" Japanese Version Copyright (c) 2002 Akihiro MOTOKI, all rights reserved. -.\" Translated Mon Feb 2 2003 by Akihiro MOTOKI -.\" Updated 2009-02-23, Akihiro MOTOKI , LDP v3.19 +.\" This file was generated with po4a. Translate the source file. .\" -.TH SHM_OPEN 3 2009-02-25 "Linux" "Linux Programmer's Manual" -.SH ̾Á° -shm_open, shm_unlink \- POSIX ¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ÎºîÀ®/¥ª¡¼¥×¥ó¡¢ -ºï½ü¤ò¹Ô¤¦ -.SH ½ñ¼° -.B #include +.\"******************************************************************* +.TH SHM_OPEN 3 2009\-02\-25 Linux "Linux Programmer's Manual" +.SH 名前 +shm_open, shm_unlink \- POSIX 共有メモリ・オブジェクトの作成/オープン/削除を行う +.SH 書式 +\fB#include \fP .br -.BR "#include " " /* mode Äê¿ôÍÑ */" +\fB#include \fP /* mode 定数用 */ .br -.BR "#include " " /* O_* Äê¿ô¤ÎÄêµÁÍÑ */" +\fB#include \fP /* O_* 定数の定義用 */ .sp -.BI "void * shm_open(const char *" name ", int " oflag ", mode_t " mode ); +\fBint shm_open(const char *\fP\fIname\fP\fB, int \fP\fIoflag\fP\fB, mode_t \fP\fImode\fP\fB);\fP .sp -.BI "int shm_unlink(const char *" name ); +\fBint shm_unlink(const char *\fP\fIname\fP\fB);\fP .sp -\fI\-lrt\fP ¤Ç¥ê¥ó¥¯¤¹¤ë¡£ -.SH ÀâÌÀ -.BR shm_open () -¤Ï¡¢POSIX ¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¿·µ¬¤ËºîÀ®/¥ª¡¼¥×¥ó¤·¤¿¤ê¡¢ -¤¹¤Ç¤Ë¸ºß¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¥ª¡¼¥×¥ó¤·¤¿¤ê¤¹¤ë¡£ -POSIX ¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Ï¡¢¼ÂºÝ¤Ë¤Ï¡¢´Ø·¸¤Î¤Ê¤¤¥×¥í¥»¥¹¤¬ -¶¦Í­¥á¥â¥ê¤ÎƱ¤¸Îΰè¤ò -.BR mmap (2) -¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¼êÃʤǤ¢¤ë¡£ -.BR shm_unlink () -¤Ï¡¢µÕ¤ÎÁàºî¡¢¤Ä¤Þ¤ê°ÊÁ°¤Ë -.BR shm_open () -¤ÇºîÀ®¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Îºï½ü¤ò¹Ô¤¦¡£ +\fI\-lrt\fP でリンクする。 +.SH 説明 +\fBshm_open\fP() は、POSIX 共有メモリ・オブジェクトを新規に作成/オープンしたり、 すでに存在するオブジェクトをオープンしたりする。 +POSIX 共有メモリ・オブジェクトは、実際には、関係のないプロセスが 共有メモリの同じ領域を \fBmmap\fP(2) +するために使用することができる手段である。 \fBshm_unlink\fP() は、逆の操作、つまり以前に \fBshm_open\fP() +で作成されたオブジェクトの削除を行う。 .LP -.BR shm_open () -¤ÎÆ°ºî¤Ï -.BR open (2) -¤È¤è¤¯»÷¤Æ¤¤¤ë¡£ -.I name -¤ÇºîÀ®¤·¤¿¤ê¥ª¡¼¥×¥ó¤·¤¿¤ê¤¹¤ë¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ò»ØÄꤹ¤ë¡£ -°Ü¿¢À­¤ò»ý¤¿¤»¤ë¤¿¤á¤Ë¤Ï¡¢¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Ï -.I /somename -¤È¤¤¤¦·Á¼°¤Î̾Á°¤Ç¼±Ê̤·¡¢ -¤½¤Î̾Á°¤Ï¡¢ºÇÂç¤Ç -.B NAME_MAX -(¤¹¤Ê¤ï¤Á 255) ʸ»ú¤Î NULL ½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó¤Ç¡¢ .\" glibc allows the initial slash to be omitted, and makes .\" multiple initial slashes equivalent to a single slash. .\" This differs from the implementation of POSIX message queues. -¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤ê¡¢¥¹¥é¥Ã¥·¥å°Ê³°¤Îʸ»ú¤¬ 1 ʸ»ú°Ê¾å³¤¯·Á¼° -¤Ë¤¹¤Ù¤­¤Ç¤¢¤ë¡£ .\" glibc allows subdirectory components in the name, in which .\" case the subdirectory must exist under /dev/shm, and allow the .\" required permissions if a user wants to create a shared memory .\" object in that subdirectory. +\fBshm_open\fP() の動作は \fBopen\fP(2) とよく似ている。 \fIname\fP +で作成したりオープンしたりする共有メモリ・オブジェクトを指定する。 移植性を持たせるためには、共有メモリ・オブジェクトは \fI/somename\fP +という形式の名前で識別し、 その名前は、最大で \fBNAME_MAX\fP (すなわち 255) 文字の NULL 終端された文字列で、 +スラッシュで始まり、スラッシュ以外の文字が 1 文字以上続く形式 にすべきである。 .LP -.I oflag -¤Ï¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ç¡¢ -.B O_RDONLY -¤È -.B O_RDWR -¤Î¤¤¤º¤ì¤«°ìÊý¤È¡¢°Ê²¼¤Ë½Ò¤Ù¤ë¾¤Î¥Õ¥é¥°¤ÎÏÀÍýϤò¤È¤Ã¤¿¤â¤Î -¤ò»ØÄꤹ¤ë¡£ -.TP 1.1i -.B O_RDONLY -Æɤ߽Ф·¥¢¥¯¥»¥¹ÍѤ˥ª¥Ö¥¸¥§¥¯¥È¤ò¥ª¡¼¥×¥ó¤¹¤ë¡£ -¤³¤Î¥Õ¥é¥°¤ò»ØÄꤷ¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤¿¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Ï¡¢ -Æɤ߽Ф· (\fBPROT_READ\fP) ¥¢¥¯¥»¥¹¤Ç¤Î¤ß -.BR mmap (2) -¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ -.TP -.B O_RDWR -Æɤ߽ñ¤­¥¢¥¯¥»¥¹ÍѤ˥ª¥Ö¥¸¥§¥¯¥È¤ò¥ª¡¼¥×¥ó¤¹¤ë¡£ -.TP -.B O_CREAT -¸ºß¤·¤Ê¤¤¾ì¹ç¡¢¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë¡£ -¥ª¥Ö¥¸¥§¥¯¥È¤Î¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Î½êÍ­¸¢¤Ï¡¢ -¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤ÎÂбþ¤¹¤ë¼Â¸ú ID ¤¬»È¤ï¤ì¡¢ -.\" ËÜÅö¤Ï¡¢Linux ¤Ç¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à ID ¤¬»È¤ï¤ì¤ë¤Î¤À¤¬¡¢ -.\" ¤½¤ÎÃͤϤۤȤó¤É¤¤¤Ä¤â¼Â¸ú ID ¤ÈƱ¤¸¤Ç¤¢¤ë¡£ (MTK, Jul 05) -¥ª¥Ö¥¸¥§¥¯¥È¤Îµö²Ä¥Ó¥Ã¥È¤Ï -.I mode -¤Î²¼°Ì 9 ¥Ó¥Ã¥È¤Ë´ð¤Å¤¤¤ÆÀßÄꤵ¤ì¤ë¡£¤¿¤À¤·¡¢ -¥Õ¥¡¥¤¥ë¥â¡¼¥ÉºîÀ®¥Þ¥¹¥¯ -.RB ( umask (2) -»²¾È) ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ëÃͤϡ¢¿·µ¬¥ª¥Ö¥¸¥§¥¯¥È¤Ë´Ø¤·¤Æ¤Ï¥¯¥ê¥¢¤µ¤ì¤ë¡£ -.I mode -¤òÄêµÁ¤¹¤ë¤¿¤á¤Ë»ÈÍѤǤ­¤ë¥Þ¥¯¥íÄê¿ô(·²)¤Ï -.BR open (2) -¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë -(¤³¤ì¤é¤ÎÄê¿ô¤Î¥·¥ó¥Ü¥ëÄêµÁ¤Ï -.I -¤Î¥¤¥ó¥¯¥ë¡¼¥É¤Ë¤è¤êÆÀ¤é¤ì¤ë)¡£ +\fIoflag\fP はビットマスクで、 \fBO_RDONLY\fP と \fBO_RDWR\fP のいずれか一方と、以下に述べる他のフラグの論理和をとったもの +を指定する。 +.TP 1.1i +\fBO_RDONLY\fP +読み出しアクセス用にオブジェクトをオープンする。 このフラグを指定してオープンされた共有メモリ・オブジェクトは、 読み出し (\fBPROT_READ\fP) +アクセスでのみ \fBmmap\fP(2) することができる。 +.TP +\fBO_RDWR\fP +読み書きアクセス用にオブジェクトをオープンする。 +.TP +\fBO_CREAT\fP +.\" In truth it is actually the file system IDs on Linux, but these +.\" are nearly always the same as the effective IDs. (MTK, Jul 05) +存在しない場合、共有メモリ・オブジェクトを作成する。 オブジェクトのユーザとグループの所有権は、 呼び出し元プロセスの対応する実効 ID が使われ、 +オブジェクトの許可ビットは \fImode\fP の下位 9 ビットに基づいて設定される。ただし、 ファイルモード作成マスク (\fBumask\fP(2) +参照) に設定されている値は、新規オブジェクトに関してはクリアされる。 \fImode\fP を定義するために使用できるマクロ定数(群)は +\fBopen\fP(2) に記載されている (これらの定数のシンボル定義は \fI\fP +のインクルードにより得られる)。 .sp -¿·µ¬¤ËºîÀ®¤µ¤ì¤¿¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ÏŤµ 0 ¤Ç½é´ü²½¤µ¤ì¤ë¡£ -¥ª¥Ö¥¸¥§¥¯¥È¤ÎÂ礭¤µ¤Ï -.BR ftruncate (2) -¤ò»È¤Ã¤ÆÀßÄê¤Ç¤­¤ë¡£ -¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¿·µ¬¤Ë³ÎÊݤµ¤ì¤¿¥Ð¥¤¥È¤Ï¼«Æ°Åª¤Ë -0 ¤Ë½é´ü²½¤µ¤ì¤ë¡£ -.TP -.B O_EXCL -.B O_CREAT -¤¬°ì½ï¤Ë»ØÄꤵ¤ì¤Æ¤ª¤ê¡¢ -.I name -¤Ç»ØÄꤵ¤ì¤¿¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤¬´û¤Ë¸ºß¤·¤¿¾ì¹ç¡¢ -¥¨¥é¡¼¤òÊÖ¤¹¡£ -¥ª¥Ö¥¸¥§¥¯¥È¤Î¸ºß³Îǧ¤È¡¢Â¸ºß¤·¤Ê¤«¤Ã¤¿¾ì¹ç¤Î¥ª¥Ö¥¸¥§¥¯¥ÈºîÀ®¤Ï¡¢ -ɬ¤º°ìÏ¢¤ÎÁàºî¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤ë (performed atomically)¡£ -.TP -.B O_TRUNC -¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤¬¤¹¤Ç¤Ë¸ºß¤·¤¿¾ì¹ç¡¢ -¤½¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò 0 ¥Ð¥¤¥È¤ËÀÚ¤êµÍ¤á¤ë¡£ +新規に作成された共有メモリ・オブジェクトは長さ 0 で初期化される。 オブジェクトの大きさは \fBftruncate\fP(2) を使って設定できる。 +共有メモリ・オブジェクトとして新規に確保されたバイトは自動的に 0 に初期化される。 +.TP +\fBO_EXCL\fP +\fBO_CREAT\fP が一緒に指定されており、 \fIname\fP で指定された共有メモリ・オブジェクトが既に存在した場合、 エラーを返す。 +オブジェクトの存在確認と、存在しなかった場合のオブジェクト作成は、 必ず一連の操作として実行される (performed atomically)。 +.TP +\fBO_TRUNC\fP +共有メモリ・オブジェクトがすでに存在した場合、 そのオブジェクトを 0 バイトに切り詰める。 .LP -¤³¤ì¤é¤Î¥Õ¥é¥°ÃͤÎÄêµÁ¤Ï -.I -¤Î¥¤¥ó¥¯¥ë¡¼¥É¤Ë¤è¤êÆÀ¤é¤ì¤ë¡£ +これらのフラグ値の定義は \fI\fP のインクルードにより得られる。 .LP -À®¸ù¤·¤Æ´°Î»¤·¤¿¾ì¹ç¡¢ -.BR shm_open () -¤Ï¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ò»²¾È¤¹¤ë¿·¤·¤¤¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£ -¤³¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢¤½¤Î¥×¥í¥»¥¹Æâ¤Ç²áµî¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤ -¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÎÃæ¤ÇºÇ¤â¾®¤µ¤Ê¿ô¤Ë¤Ê¤ë¤³¤È¤¬Êݾڤµ¤ì¤ë¡£ -.B FD_CLOEXEC -¥Õ¥é¥° -.RB ( fcntl (2) -¤ò»²¾È) ¤¬¡¢¤³¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÀßÄꤵ¤ì¤ë¡£ -.PP -Ä̾¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢¤³¤Î¸å³¤±¤Æ¼Â¹Ô¤µ¤ì¤ë -.BR ftruncate (2) -(¿·µ¬¤ËºîÀ®¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î¾ì¹ç¤Î¤ß) ¤È -.BR mmap (2) -¤Î¸Æ¤Ó½Ð¤·¤Ë»ÈÍѤµ¤ì¤ë¡£ -.BR mmap (2) -¤ò¸Æ¤Ó½Ð¤·¤¿¸å¤Ï¡¢¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò¥¯¥í¡¼¥º¤·¤Æ¤â¤è¤¯¡¢ -¥¯¥í¡¼¥º¤·¤Æ¤â¥á¥â¥ê¡¦¥Þ¥Ã¥Ô¥ó¥°¤Ë±Æ¶Á¤òÍ¿¤¨¤ë¤³¤È¤Ï¤Ê¤¤¡£ -.PP -.BR shm_unlink () -¤ÎÆ°ºî¤Ï -.BR unlink (2) -¤È¤è¤¯»÷¤Æ¤¤¤ë: -¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È̾¤òºï½ü¤·¡¢¤¹¤Ù¤Æ¤Î¥×¥í¥»¥¹¤¬½èÍýÂоݤΠ-¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥ó¥Þ¥Ã¥×¤·¤¿»þÅÀ¤Ç¥ª¥Ö¥¸¥§¥¯¥È¤Î³ä¤êÅö¤Æ¤ò²ò½ü¤·¡¢ -Âбþ¤¹¤ë¥á¥â¥êÎΰè¤ÎÆâÍƤòÇË´þ¤¹¤ë¡£ -.BR shm_unlink () -¤¬À®¸ù¤·¤¿¸å¤Ç¡¢Æ±¤¸ -.I name -¤ò»ý¤Ä¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ -.BR shm_open () -¤ò¹Ô¤¦¤È¡¢ -.RB ( O_CREAT -¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç) ¼ºÇÔ¤¹¤ë¡£ -.RB ( O_CREAT -¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¿·¤·¤¯Ê̤Υª¥Ö¥¸¥§¥¯¥È¤¬ºîÀ®¤µ¤ì¤ë)¡£ -.SH ÊÖ¤êÃÍ -À®¸ù¤·¤¿¾ì¹ç¡¢ -.BR shm_open () -¤ÏÈóÉé¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£ -¼ºÇÔ¤·¤¿¾ì¹ç¡¢ -.BR shm_open () -¤Ï \-1 ¤òÊÖ¤¹¡£ -.BR shm_unlink () -¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç 0 ¤ò¡¢¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¾ì¹ç \-1 ¤òÊÖ¤¹¡£ -.SH ¥¨¥é¡¼ -¼ºÇÔ¤·¤¿¾ì¹ç¡¢¥¨¥é¡¼¤Î¸¶°ø¤ò¼¨¤¹¤¿¤á -.I errno -¤¬ÀßÄꤵ¤ì¤ë¡£ -.I errno -¤ËÀßÄꤵ¤ì¤ëÃͤϰʲ¼¤ÎÄ̤ê¤Ç¤¢¤ë: -.TP -.B EACCES -¶¦Í­¥á¥â¥ê¥ª¥Ö¥¸¥§¥¯¥È¤ò -.BR shm_unlink () -¤¹¤ë¸¢¸Â¤¬¤Ê¤«¤Ã¤¿¡£ -.TP -.B EACCES -»ØÄꤵ¤ì¤¿ -.I mode -¤Ç -.I name -¤ò -.BR shm_open () -¤¹¤ë¸¢¸Â¤¬¤Ê¤«¤Ã¤¿¡£¤â¤·¤¯¤Ï¡¢ -.B O_TRUNC -¤¬»ØÄꤵ¤ì¤¿¤¬¡¢¸Æ¤Ó½Ð¤·¸µ¤Ë¤Ï¤½¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ¹¤ë½ñ¤­¹þ¤ß¸¢¸Â¤¬ -¤Ê¤«¤Ã¤¿¡£ -.TP -.B EEXIST -.B O_CREAT -¤È -.B O_EXCL -¤ÎξÊý¤¬ -.BR shm_open () -¤Ë»ØÄꤵ¤ì¤¿¤¬¡¢ -.I name -¤Ç»ØÄꤵ¤ì¤¿¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤¬´û¤Ë¸ºß¤·¤¿¡£ -.TP -.B EINVAL -.BR shm_open () -¤ËÍ¿¤¨¤é¤ì¤¿ -.I name -°ú¤­¿ô¤¬ÉÔÀµ¤Ç¤¢¤Ã¤¿¡£ -.TP -.B EMFILE -¥×¥í¥»¥¹¤¬¥ª¡¼¥×¥ó²Äǽ¤Ê¥Õ¥¡¥¤¥ë¿ô¤Î¾å¸Â¤Ë¤¹¤Ç¤Ë㤷¤Æ¤¤¤¿¡£ -.TP -.B ENAMETOOLONG -.I name -¤ÎŤµ¤¬ -.B PATH_MAX -¤ò±Û¤¨¤Æ¤¤¤ë¡£ -.TP -.B ENFILE -¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ç¥ª¡¼¥×¥ó¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¿ô¤Î¾å¸Â¤Ë㤷¤¿¡£ -.TP -.B ENOENT -¸ºß¤·¤Æ¤¤¤Ê¤¤ -.I name -¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò -.BR shm_open () -¤·¤è¤¦¤È¤·¤¿¤¬¡¢ -.B O_CREAT -¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£ -.TP -.B ENOENT -¸ºß¤·¤Ê¤¤ -.I name -¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò -.BR shm_unlink () -¤·¤è¤¦¤È¤·¤¿¡£ -.SH ¥Ð¡¼¥¸¥ç¥ó -¤³¤ì¤é¤Î´Ø¿ô¤Ï glibc 2.2 °Ê¹ß¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£ -.SH ½àµò -POSIX.1-2001. +成功して完了した場合、 \fBshm_open\fP() は共有メモリ・オブジェクトを参照する新しいファイル・ディスクリプタを返す。 +このファイル・ディスクリプタは、そのプロセス内で過去にオープンされていない ファイル・ディスクリプタの中で最も小さな数になることが保証される。 +\fBFD_CLOEXEC\fP フラグ (\fBfcntl\fP(2) を参照) が、このファイル・ディスクリプタに設定される。 + +通常、これらのファイル・ディスクリプタは、この後続けて実行される \fBftruncate\fP(2) (新規に作成されたオブジェクトの場合のみ) と +\fBmmap\fP(2) の呼び出しに使用される。 \fBmmap\fP(2) を呼び出した後は、ファイル・ディスクリプタをクローズしてもよく、 +クローズしてもメモリ・マッピングに影響を与えることはない。 + +\fBshm_unlink\fP() の動作は \fBunlink\fP(2) とよく似ている: +共有メモリ・オブジェクト名を削除し、すべてのプロセスが処理対象の オブジェクトをアンマップした時点でオブジェクトの割り当てを解除し、 +対応するメモリ領域の内容を破棄する。 \fBshm_unlink\fP() が成功した後で、同じ \fIname\fP を持つオブジェクトに対して +\fBshm_open\fP() を行うと、 (\fBO_CREAT\fP が指定されていない場合) 失敗する。 (\fBO_CREAT\fP +が指定されている場合、新しく別のオブジェクトが作成される)。 +.SH 返り値 +成功した場合、 \fBshm_open\fP() は非負のファイル・ディスクリプタを返す。 失敗した場合、 \fBshm_open\fP() は \-1 を返す。 +\fBshm_unlink\fP() は、成功した場合 0 を、エラーが起こった場合 \-1 を返す。 +.SH エラー +失敗した場合、エラーの原因を示すため \fIerrno\fP が設定される。 \fIerrno\fP に設定される値は以下の通りである: +.TP +\fBEACCES\fP +共有メモリオブジェクトを \fBshm_unlink\fP() する権限がなかった。 +.TP +\fBEACCES\fP +指定された \fImode\fP で \fIname\fP を \fBshm_open\fP() する権限がなかった。もしくは、 \fBO_TRUNC\fP +が指定されたが、呼び出し元にはそのオブジェクトに対する書き込み権限が なかった。 +.TP +\fBEEXIST\fP +\fBO_CREAT\fP と \fBO_EXCL\fP の両方が \fBshm_open\fP() に指定されたが、 \fIname\fP +で指定された共有メモリ・オブジェクトが既に存在した。 +.TP +\fBEINVAL\fP +\fBshm_open\fP() に与えられた \fIname\fP 引き数が不正であった。 +.TP +\fBEMFILE\fP +プロセスがオープン可能なファイル数の上限にすでに達していた。 +.TP +\fBENAMETOOLONG\fP +\fIname\fP の長さが \fBPATH_MAX\fP を越えている。 +.TP +\fBENFILE\fP +ファイルシステムでオープンできるファイル数の上限に達した。 +.TP +\fBENOENT\fP +存在していない \fIname\fP のオブジェクトを \fBshm_open\fP() しようとしたが、 \fBO_CREAT\fP が指定されていなかった。 +.TP +\fBENOENT\fP +存在しない \fIname\fP のオブジェクトを \fBshm_unlink\fP() しようとした。 +.SH バージョン +これらの関数は glibc 2.2 以降で提供されている。 +.SH 準拠 +POSIX.1\-2001. .LP -POSIX.1-2001 ¤Ë¤Ï¡¢¿·µ¬¤ËºîÀ®¤µ¤ì¤ë¶¦Í­¥á¥â¥ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥°¥ë¡¼¥×½êÍ­¸¢¤Ï¡¢ -¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î¼Â¸ú¥°¥ë¡¼¥× ID ¤« ¡Ö¥·¥¹¥Æ¥à¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥°¥ë¡¼¥× ID¡× -¤Î¤É¤Á¤é¤«¤ËÀßÄꤵ¤ì¤ë¡¢¤È½ñ¤«¤ì¤Æ¤¤¤ë¡£ -.SH Ãí°Õ +POSIX.1\-2001 には、新規に作成される共有メモリオブジェクトのグループ所有権は、 呼び出し元プロセスの実効グループ ID か +「システムのデフォルトのグループ ID」 のどちらかに設定される、と書かれている。 +.SH 注意 .LP -POSIX ¤Ï -.B O_RDONLY -¤È -.B O_TRUNC -¤¬°ì½ï¤Ë»ØÄꤵ¤ì¤¿¾ì¹ç¤ÎÆ°ºî¤ò̤ÄêµÁ¤Ë¤·¤Æ¤¤¤ë¡£Linux ¤Ç¤Ï¡¢ -´û¸¤Î¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ¹¤ëÀÚ¤êµÍ¤á (truncate) ¤ÏÀ®¸ù¤¹¤ë¡£ -¤·¤«¤·¡¢Â¾¤Î UNIX ¥·¥¹¥Æ¥à¤Ç¤âƱ¤¸¤Ç¤¢¤ë¤È¤Ï¸Â¤é¤Ê¤¤¡£ +POSIX は \fBO_RDONLY\fP と \fBO_TRUNC\fP が一緒に指定された場合の動作を未定義にしている。Linux では、 +既存の共有メモリ・オブジェクトに対する切り詰め (truncate) は成功する。 しかし、他の UNIX システムでも同じであるとは限らない。 .LP -Linux 2.4 ¤Ë¤ª¤±¤ë POSIX ¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î¼ÂÁõ¤Ï -ÀìÍѤΥե¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»ÈÍѤ¹¤ë¡£¤½¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÏÄ̾ï -.I /dev/shm -¤Ë¥Þ¥¦¥ó¥È¤µ¤ì¤ë¡£ -.SH ´ØÏ¢¹àÌÜ -.BR close (2), -.BR fchmod (2), -.BR fchown (2), -.BR fcntl (2), -.BR fstat (2), -.BR ftruncate (2), -.BR mmap (2), -.BR open (2), -.BR umask (2), -.BR shm_overview (7) +Linux 2.4 における POSIX 共有メモリ・オブジェクトの実装は 専用のファイルシステムを使用する。そのファイルシステムは通常 +\fI/dev/shm\fP にマウントされる。 +.SH 関連項目 +\fBclose\fP(2), \fBfchmod\fP(2), \fBfchown\fP(2), \fBfcntl\fP(2), \fBfstat\fP(2), +\fBftruncate\fP(2), \fBmmap\fP(2), \fBopen\fP(2), \fBumask\fP(2), \fBshm_overview\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。