OSDN Git Service

Retire LDP man-pages repository
[linuxjm/LDP_man-pages.git] / draft / man3 / makecontext.3
diff --git a/draft/man3/makecontext.3 b/draft/man3/makecontext.3
deleted file mode 100644 (file)
index 7f273d6..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-
-.\" Copyright (C) 2001 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" %%%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.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date.  The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein.  The author(s) may not
-.\" have taken the same level of care in the production of this manual,
-.\" which is licensed free of charge, as they might when working
-.\" professionally.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" 2006-08-02, mtk, Added example program
-.\"
-.\"*******************************************************************
-.\"
-.\" This file was generated with po4a. Translate the source file.
-.\"
-.\"*******************************************************************
-.\"
-.\" Japanese Version Copyright (c) 2001 NAKANO Takeo all rights reserved.
-.\" Translated Sat Dec 15 2001 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
-.\" Updated 2008-12-24, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.15
-.\"
-.TH MAKECONTEXT 3 2014\-05\-28 GNU "Linux Programmer's Manual"
-.SH 名前
-makecontext, swapcontext \- ユーザーコンテキストを操作する
-.SH 書式
-\fB#include <ucontext.h>\fP
-.sp
-\fBvoid makecontext(ucontext_t *\fP\fIucp\fP\fB, void (*\fP\fIfunc\fP\fB)(),\fP \fBint
-\fP\fIargc\fP\fB, ...);\fP
-.sp
-\fBint swapcontext(ucontext_t *\fP\fIoucp\fP\fB, const ucontext_t *\fP\fIucp\fP\fB);\fP
-.SH 説明
-System V 的な環境では、 \fBmcontext_t\fP および \fBucontext_t\fP という 2 つの型と、
-\fBgetcontext\fP(3), \fBsetcontext\fP(3), \fBmakecontext\fP(), \fBswapcontext\fP()  という
-4 つの関数が \fI<ucontext.h>\fP で定義されており、あるプロセス内部で制御下にある複数のスレッド間で、
-ユーザーレベルのコンテキスト切替えができるようになっている。
-.LP
-これらの型と、最初の 2 つの関数については、 \fBgetcontext\fP(3) を参照のこと。
-.LP
-\fBmakecontext\fP()  関数は、ポインター \fIucp\fP が指すコンテキストを変更する (\fIucp\fP は以前の
-\fBgetcontext\fP(3)  呼び出しで得られたものである)。 \fBmakecontext\fP()
-を起動する前には、呼び出し者は、このコンテキスト用に 新しいスタックを確保し、そのアドレスを \fIucp\->uc_stack\fP に代入し、
-さらに後継のコンテキストを定義し、そのアドレスを \fIucp\->uc_link\fP に 代入しなければならない。
-
-このコンテキストが将来 (\fBsetcontext\fP(3)  または \fBswapcontext\fP()  によって)  有効にされると、関数
-\fIfunc\fP が呼ばれ、 引き数として \fIargc\fP 以降の整数 (\fIint\fP)  引き数の列が渡される。 呼び出し者は \fIargc\fP
-にこれらの引き数の個数を指定しなければならない。 この関数が戻ると、後継のコンテキストが有効になる。 後継コンテキストのポインターが NULL
-の場合、そのスレッドが終了する。
-.LP
-\fBswapcontext\fP()  関数は現在のコンテキストを ポインター \fIoucp\fP が指す構造体に保存し、 ポインター \fIucp\fP
-が指すコンテキストを有効にする。
-.SH 返り値
-成功すると、 \fBswapcontext\fP()  は返らない (しかし後に \fIoucp\fP が有効になった場合には返ることがある。 このときには
-\fBswapcontext\fP()  は 0 を返すように見える。)  失敗すると、 \fBswapcontext\fP()  は \-1 を返し、
-\fIerrno\fP をエラーに応じて設定する。
-.SH エラー
-.TP 
-\fBENOMEM\fP
-スタックに割り当てる空間が残っていない。
-.SH バージョン
-\fBmakecontext\fP()  と \fBswapcontext\fP()  は、バージョン 2.1 以降の glibc で提供されている。
-.SH 属性
-.SS "マルチスレッディング (pthreads(7) 参照)"
-関数 \fBmakecontext\fP() と \fBswapcontext\fP() はスレッドセーフである。
-.SH 準拠
-SUSv2, POSIX.1\-2001.  POSIX.1\-2008 では、移植性の問題から \fBmakecontext\fP()  と
-\fBswapcontext\fP()  の仕様が削除されている。 代わりに、アプリケーションを POSIX スレッドを使って書き直すことが 推奨されている。
-.SH 注意
-\fIucp\->uc_stack\fP の解釈は \fBsigaltstack\fP(2)  の場合と同じである。 すなわちこの構造体には、
-スタックとして用いられるメモリー領域の開始アドレスと長さが含まれ、 これはスタックが伸びる方向がどちらであるかには関係しない。
-したがって、ユーザープログラムはこの件については心配しなくてよい。
-
-\fIint\fP とポインター型が同じ大きさであるアーキテクチャーでは (x86\-32 はその例であり、両方の型とも 32 ビットである)、
-\fBmakecontext\fP()  の \fIargc\fP 以降の引き数としてポインターを渡してもうまく動くかもしれない。
-しかしながら、このようにすると、移植性は保証されず、 標準に従えば動作は未定義であり、ポインターが \fIint\fP
-よりも大きいアーキテクチャーでは正しく動作しないことだろう。 それにも関わらず、バージョン 2.8 以降の glibc では、
-\fBmakecontext\fP()  に変更が行われ、(x86\-64 などの) いくつかの 64 ビットアーキテクチャーで
-引き数としてポインターを渡すことができるようになっている。
-.SH 例
-.PP
-以下のサンプルプログラムは、 \fBgetcontext\fP(3), \fBmakecontext\fP(), \fBswapcontext\fP()
-の使用方法の例を示すものである。 このプログラムを実行すると、以下のような出力が得られる:
-.in +4n
-.nf
-
-$\fB ./a.out\fP
-main: swapcontext(&uctx_main, &uctx_func2)
-func2: started
-func2: swapcontext(&uctx_func2, &uctx_func1)
-func1: started
-func1: swapcontext(&uctx_func1, &uctx_func2)
-func2: returning
-func1: returning
-main: exiting
-.fi
-.in
-.SS プログラムのソース
-\&
-.nf
-#include <ucontext.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static ucontext_t uctx_main, uctx_func1, uctx_func2;
-
-#define handle_error(msg) \e
-    do { perror(msg); exit(EXIT_FAILURE); } while (0)
-
-static void
-func1(void)
-{
-    printf("func1: started\en");
-    printf("func1: swapcontext(&uctx_func1, &uctx_func2)\en");
-    if (swapcontext(&uctx_func1, &uctx_func2) == \-1)
-        handle_error("swapcontext");
-    printf("func1: returning\en");
-}
-
-static void
-func2(void)
-{
-    printf("func2: started\en");
-    printf("func2: swapcontext(&uctx_func2, &uctx_func1)\en");
-    if (swapcontext(&uctx_func2, &uctx_func1) == \-1)
-        handle_error("swapcontext");
-    printf("func2: returning\en");
-}
-
-int
-main(int argc, char *argv[])
-{
-    char func1_stack[16384];
-    char func2_stack[16384];
-
-    if (getcontext(&uctx_func1) == \-1)
-        handle_error("getcontext");
-    uctx_func1.uc_stack.ss_sp = func1_stack;
-    uctx_func1.uc_stack.ss_size = sizeof(func1_stack);
-    uctx_func1.uc_link = &uctx_main;
-    makecontext(&uctx_func1, func1, 0);
-
-    if (getcontext(&uctx_func2) == \-1)
-        handle_error("getcontext");
-    uctx_func2.uc_stack.ss_sp = func2_stack;
-    uctx_func2.uc_stack.ss_size = sizeof(func2_stack);
-    /* Successor context is f1(), unless argc > 1 */
-    uctx_func2.uc_link = (argc > 1) ? NULL : &uctx_func1;
-    makecontext(&uctx_func2, func2, 0);
-
-    printf("main: swapcontext(&uctx_main, &uctx_func2)\en");
-    if (swapcontext(&uctx_main, &uctx_func2) == \-1)
-        handle_error("swapcontext");
-
-    printf("main: exiting\en");
-    exit(EXIT_SUCCESS);
-}
-.fi
-.SH 関連項目
-\fBsigaction\fP(2), \fBsigaltstack\fP(2), \fBsigprocmask\fP(2), \fBgetcontext\fP(3),
-\fBsigsetjmp\fP(3)
-.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。