OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man3 / makecontext.3
index 807ef5e..6d34e47 100644 (file)
 .\" Updated 2008-12-24, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.15
 .\"
 .TH MAKECONTEXT 3 2009-03-31 "GNU" "Linux Programmer's Manual"
-.SH Ì¾Á°
-makecontext, swapcontext \- ¥æ¡¼¥¶¥³¥ó¥Æ¥­¥¹¥È¤òÁàºî¤¹¤ë
-.SH ½ñ¼°
+.SH 名前
+makecontext, swapcontext \- ユーザコンテキストを操作する
+.SH 書式
 .B #include <ucontext.h>
 .sp
 .BI "void makecontext(ucontext_t *" ucp ", void (*" func )(),
 .BI "int " argc ", ...);"
 .sp
 .BI "int swapcontext(ucontext_t *" oucp ", ucontext_t *" ucp );
-.SH ÀâÌÀ
-System V Åª¤Ê´Ä¶­¤Ç¤Ï¡¢
-\fBmcontext_t\fP ¤ª¤è¤Ó \fBucontext_t\fP ¤È¤¤¤¦ 2 ¤Ä¤Î·¿¤È¡¢
+.SH 説明
+System V 的な環境では、
+\fBmcontext_t\fP および \fBucontext_t\fP という 2 つの型と、
 .BR getcontext (2),
 .BR setcontext (2),
 .BR makecontext (),
 .BR swapcontext ()
-¤È¤¤¤¦ 4 ¤Ä¤Î´Ø¿ô¤¬
+という 4 つの関数が
 .I <ucontext.h>
-¤ÇÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢¤¢¤ë¥×¥í¥»¥¹ÆâÉô¤ÇÀ©¸æ²¼¤Ë¤¢¤ëÊ£¿ô¤Î¥¹¥ì¥Ã¥É´Ö¤Ç¡¢
-¥æ¡¼¥¶¥ì¥Ù¥ë¤Î¥³¥ó¥Æ¥­¥¹¥ÈÀÚÂؤ¨¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£
+で定義されており、あるプロセス内部で制御下にある複数のスレッド間で、
+ユーザレベルのコンテキスト切替えができるようになっている。
 .LP
-¤³¤ì¤é¤Î·¿¤È¡¢ºÇ½é¤Î 2 ¤Ä¤Î´Ø¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢
+これらの型と、最初の 2 つの関数については、
 .BR getcontext (2)
-¤ò»²¾È¤Î¤³¤È¡£
+を参照のこと。
 .LP
 .BR makecontext ()
-´Ø¿ô¤Ï¡¢¥Ý¥¤¥ó¥¿ \fIucp\fP ¤¬»Ø¤¹¥³¥ó¥Æ¥­¥¹¥È¤òÊѹ¹¤¹¤ë
-(\fIucp\fP ¤Ï°ÊÁ°¤Î
+関数は、ポインタ \fIucp\fP が指すコンテキストを変更する
+(\fIucp\fP は以前の
 .BR getcontext (2)
-¸Æ¤Ó½Ð¤·¤ÇÆÀ¤é¤ì¤¿¤â¤Î¤Ç¤¢¤ë)¡£
+呼び出しで得られたものである)。
 .BR makecontext ()
-¤òµ¯Æ°¤¹¤ëÁ°¤Ë¤Ï¡¢¸Æ¤Ó½Ð¤·¼Ô¤Ï¡¢¤³¤Î¥³¥ó¥Æ¥­¥¹¥ÈÍѤË
-¿·¤·¤¤¥¹¥¿¥Ã¥¯¤ò³ÎÊݤ·¡¢¤½¤Î¥¢¥É¥ì¥¹¤ò \fIucp\->uc_stack\fP ¤ËÂåÆþ¤·¡¢
-¤µ¤é¤Ë¸å·Ñ¤Î¥³¥ó¥Æ¥­¥¹¥È¤òÄêµÁ¤·¡¢¤½¤Î¥¢¥É¥ì¥¹¤ò \fIucp\->uc_link\fP ¤Ë
-ÂåÆþ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+を起動する前には、呼び出し者は、このコンテキスト用に
+新しいスタックを確保し、そのアドレスを \fIucp\->uc_stack\fP に代入し、
+さらに後継のコンテキストを定義し、そのアドレスを \fIucp\->uc_link\fP に
+代入しなければならない。
 
-¤³¤Î¥³¥ó¥Æ¥­¥¹¥È¤¬¾­Íè
+このコンテキストが将来
 .RB ( setcontext (2)
-¤Þ¤¿¤Ï
+または
 .BR swapcontext ()
-¤Ë¤è¤Ã¤Æ)
-Í­¸ú¤Ë¤µ¤ì¤ë¤È¡¢´Ø¿ô \fIfunc\fP ¤¬¸Æ¤Ð¤ì¡¢
-°ú¤­¿ô¤È¤·¤Æ
+によって)
+有効にされると、関数 \fIfunc\fP が呼ばれ、
+引き数として
 .I argc
-°Ê¹ß¤ÎÀ°¿ô
+以降の整数
 .RI ( int )
-°ú¤­¿ô¤ÎÎó¤¬ÅϤµ¤ì¤ë¡£
-¸Æ¤Ó½Ð¤·¼Ô¤Ï
+引き数の列が渡される。
+呼び出し者は
 .I argc
-¤Ë¤³¤ì¤é¤Î°ú¤­¿ô¤Î¸Ä¿ô¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¤³¤Î´Ø¿ô¤¬Ìá¤ë¤È¡¢¸å·Ñ¤Î¥³¥ó¥Æ¥­¥¹¥È¤¬Í­¸ú¤Ë¤Ê¤ë¡£
-¸å·Ñ¥³¥ó¥Æ¥­¥¹¥È¤Î¥Ý¥¤¥ó¥¿¤¬ NULL ¤Î¾ì¹ç¡¢¤½¤Î¥¹¥ì¥Ã¥É¤¬½ªÎ»¤¹¤ë¡£
+にこれらの引き数の個数を指定しなければならない。
+この関数が戻ると、後継のコンテキストが有効になる。
+後継コンテキストのポインタが NULL の場合、そのスレッドが終了する。
 .LP
 .BR swapcontext ()
-´Ø¿ô¤Ï¸½ºß¤Î¥³¥ó¥Æ¥­¥¹¥È¤ò
-¥Ý¥¤¥ó¥¿ \fIoucp\fP ¤¬»Ø¤¹¹½Â¤ÂΤËÊݸ¤·¡¢
-¥Ý¥¤¥ó¥¿ \fIucp\fP ¤¬»Ø¤¹¥³¥ó¥Æ¥­¥¹¥È¤òÍ­¸ú¤Ë¤¹¤ë¡£
-.SH ÊÖ¤êÃÍ
-À®¸ù¤¹¤ë¤È¡¢
+関数は現在のコンテキストを
+ポインタ \fIoucp\fP が指す構造体に保存し、
+ポインタ \fIucp\fP が指すコンテキストを有効にする。
+.SH 返り値
+成功すると、
 .BR swapcontext ()
-¤ÏÊÖ¤é¤Ê¤¤
-(¤·¤«¤·¸å¤Ë \fIoucp\fP ¤¬Í­¸ú¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ë¤ÏÊ֤뤳¤È¤¬¤¢¤ë¡£
-¤³¤Î¤È¤­¤Ë¤Ï
+は返らない
+(しかし後に \fIoucp\fP が有効になった場合には返ることがある。
+このときには
 .BR swapcontext ()
-¤Ï 0 ¤òÊÖ¤¹¤è¤¦¤Ë¸«¤¨¤ë¡£)
-¼ºÇÔ¤¹¤ë¤È¡¢
+は 0 を返すように見える。)
+失敗すると、
 .BR swapcontext ()
-¤Ï \-1 ¤òÊÖ¤·¡¢
-\fIerrno\fP ¤ò¥¨¥é¡¼¤Ë±þ¤¸¤ÆÀßÄꤹ¤ë¡£
-.SH ¥¨¥é¡¼
+は \-1 を返し、
+\fIerrno\fP をエラーに応じて設定する。
+.SH ã\82¨ã\83©ã\83¼
 .TP
 .B ENOMEM
-¥¹¥¿¥Ã¥¯¤Ë³ä¤êÅö¤Æ¤ë¶õ´Ö¤¬»Ä¤Ã¤Æ¤¤¤Ê¤¤¡£
-.SH ¥Ð¡¼¥¸¥ç¥ó
+スタックに割り当てる空間が残っていない。
+.SH バージョン
 .BR makecontext ()
-¤È
+と
 .BR swapcontext ()
-¤Ï¡¢¥Ð¡¼¥¸¥ç¥ó 2.1 °Ê¹ß¤Î glibc ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
-.SH ½àµò
+は、バージョン 2.1 以降の glibc で提供されている。
+.SH 準拠
 SUSv2, POSIX.1-2001.
-POSIX.1-2008 ¤Ç¤Ï¡¢°Ü¿¢À­¤ÎÌäÂ꤫¤é
+POSIX.1-2008 では、移植性の問題から
 .BR makecontext ()
-¤È
+と
 .BR swapcontext ()
-¤Î»ÅÍͤ¬ºï½ü¤µ¤ì¤Æ¤¤¤ë¡£
-Âå¤ï¤ê¤Ë¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò POSIX ¥¹¥ì¥Ã¥É¤ò»È¤Ã¤Æ½ñ¤­Ä¾¤¹¤³¤È¤¬
-¿ä¾©¤µ¤ì¤Æ¤¤¤ë¡£
-.SH Ãí°Õ
-\fIucp\->uc_stack\fP ¤Î²ò¼á¤Ï
+の仕様が削除されている。
+代わりに、アプリケーションを POSIX スレッドを使って書き直すことが
+推奨されている。
+.SH 注意
+\fIucp\->uc_stack\fP の解釈は
 .BR sigaltstack (2)
-¤Î¾ì¹ç¤ÈƱ¤¸¤Ç¤¢¤ë¡£
-¤¹¤Ê¤ï¤Á¤³¤Î¹½Â¤ÂΤˤϡ¢
-¥¹¥¿¥Ã¥¯¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¥á¥â¥êÎΰè¤Î³«»Ï¥¢¥É¥ì¥¹¤ÈŤµ¤¬´Þ¤Þ¤ì¡¢
-¤³¤ì¤Ï¥¹¥¿¥Ã¥¯¤¬¿­¤Ó¤ëÊý¸þ¤¬¤É¤Á¤é¤Ç¤¢¤ë¤«¤Ë¤Ï´Ø·¸¤·¤Ê¤¤¡£
-¤·¤¿¤¬¤Ã¤Æ¡¢¥æ¡¼¥¶¥×¥í¥°¥é¥à¤Ï¤³¤Î·ï¤Ë¤Ä¤¤¤Æ¤Ï¿´ÇÛ¤·¤Ê¤¯¤Æ¤è¤¤¡£
+の場合と同じである。
+すなわちこの構造体には、
+スタックとして用いられるメモリ領域の開始アドレスと長さが含まれ、
+これはスタックが伸びる方向がどちらであるかには関係しない。
+したがって、ユーザプログラムはこの件については心配しなくてよい。
 
 .I int
-¤È¥Ý¥¤¥ó¥¿·¿¤¬Æ±¤¸Â礭¤µ¤Ç¤¢¤ë¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ï
-(x86-32 ¤Ï¤½¤ÎÎã¤Ç¤¢¤ê¡¢Î¾Êý¤Î·¿¤È¤â 32 ¥Ó¥Ã¥È¤Ç¤¢¤ë)¡¢
+とポインタ型が同じ大きさであるアーキテクチャでは
+(x86-32 はその例であり、両方の型とも 32 ビットである)、
 .BR makecontext ()
-¤Î
+の
 .I argc
-°Ê¹ß¤Î°ú¤­¿ô¤È¤·¤Æ¥Ý¥¤¥ó¥¿¤òÅϤ·¤Æ¤â¤¦¤Þ¤¯Æ°¤¯¤«¤â¤·¤ì¤Ê¤¤¡£
-¤·¤«¤·¤Ê¤¬¤é¡¢¤³¤Î¤è¤¦¤Ë¤¹¤ë¤È¡¢°Ü¿¢À­¤ÏÊݾڤµ¤ì¤º¡¢
-ɸ½à¤Ë½¾¤¨¤ÐÆ°ºî¤Ï̤ÄêµÁ¤Ç¤¢¤ê¡¢¥Ý¥¤¥ó¥¿¤¬
+以降の引き数としてポインタを渡してもうまく動くかもしれない。
+しかしながら、このようにすると、移植性は保証されず、
+標準に従えば動作は未定義であり、ポインタが
 .I int
-¤è¤ê¤âÂ礭¤¤¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤ÏÀµ¤·¤¯Æ°ºî¤·¤Ê¤¤¤³¤È¤À¤í¤¦¡£
-¤½¤ì¤Ë¤â´Ø¤ï¤é¤º¡¢¥Ð¡¼¥¸¥ç¥ó 2.8 °Ê¹ß¤Î glibc ¤Ç¤Ï¡¢
+よりも大きいアーキテクチャでは正しく動作しないことだろう。
+それにも関わらず、バージョン 2.8 以降の glibc では、
 .BR makecontext ()
-¤ËÊѹ¹¤¬¹Ô¤ï¤ì¡¢(x86-64 ¤Ê¤É¤Î) ¤¤¤¯¤Ä¤«¤Î 64 ¥Ó¥Ã¥È¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç
-°ú¤­¿ô¤È¤·¤Æ¥Ý¥¤¥ó¥¿¤òÅϤ¹¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£
-.SH Îã
+に変更が行われ、(x86-64 などの) いくつかの 64 ビットアーキテクチャで
+引き数としてポインタを渡すことができるようになっている。
+.SH 
 .PP
-°Ê²¼¤Î¥µ¥ó¥×¥ë¡¦¥×¥í¥°¥é¥à¤Ï¡¢
+以下のサンプル・プログラムは、
 .BR getcontext (2),
 .BR makecontext (),
 .BR swapcontext ()
-¤Î»ÈÍÑÊýË¡¤ÎÎã¤ò¼¨¤¹¤â¤Î¤Ç¤¢¤ë¡£
-¤³¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤Ê½ÐÎϤ¬ÆÀ¤é¤ì¤ë:
+の使用方法の例を示すものである。
+このプログラムを実行すると、以下のような出力が得られる:
 .in +4n
 .nf
 
@@ -160,7 +160,7 @@ func1: returning
 main: exiting
 .fi
 .in
-.SS ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹
+.SS ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81®ã\82½ã\83¼ã\82¹
 \&
 .nf
 #include <ucontext.h>
@@ -221,7 +221,7 @@ main(int argc, char *argv[])
     exit(EXIT_SUCCESS);
 }
 .fi
-.SH ´ØÏ¢¹àÌÜ
+.SH 関連項目
 .BR getcontext (2),
 .BR sigaction (2),
 .BR sigaltstack (2),