OSDN Git Service

(split) LDP: Update draft and release pages (based on the previous commit)
authorAkihiro MOTOKI <amotoki@gmail.com>
Tue, 26 Mar 2013 06:07:40 +0000 (15:07 +0900)
committerAkihiro MOTOKI <amotoki@gmail.com>
Tue, 26 Mar 2013 06:07:40 +0000 (15:07 +0900)
79 files changed:
draft/man2/get_mempolicy.2 [new file with mode: 0644]
draft/man2/getcpu.2 [new file with mode: 0644]
draft/man2/mbind.2 [new file with mode: 0644]
draft/man2/migrate_pages.2 [new file with mode: 0644]
draft/man2/mlock.2 [new file with mode: 0644]
draft/man2/mmap2.2 [new file with mode: 0644]
draft/man2/mprotect.2 [new file with mode: 0644]
draft/man2/mremap.2 [new file with mode: 0644]
draft/man2/shmop.2 [new file with mode: 0644]
draft/man2/splice.2 [new file with mode: 0644]
draft/man2/vm86.2 [new file with mode: 0644]
draft/man3/__setfpucw.3 [new file with mode: 0644]
draft/man3/alloca.3 [new file with mode: 0644]
draft/man3/catgets.3 [new file with mode: 0644]
draft/man3/catopen.3 [new file with mode: 0644]
draft/man3/dl_iterate_phdr.3 [new file with mode: 0644]
draft/man3/dlopen.3 [new file with mode: 0644]
draft/man3/fenv.3 [new file with mode: 0644]
draft/man3/mq_receive.3 [new file with mode: 0644]
draft/man3/netlink.3 [new file with mode: 0644]
draft/man3/posix_fallocate.3 [new file with mode: 0644]
draft/man3/posix_memalign.3 [new file with mode: 0644]
draft/man3/queue.3 [new file with mode: 0644]
draft/man3/shm_open.3 [new file with mode: 0644]
draft/man5/charmap.5 [new file with mode: 0644]
draft/man5/dir_colors.5 [new file with mode: 0644]
draft/man5/elf.5 [new file with mode: 0644]
draft/man5/locale.5 [new file with mode: 0644]
draft/man5/services.5 [new file with mode: 0644]
draft/man5/slabinfo.5 [new file with mode: 0644]
draft/man7/futex.7 [new file with mode: 0644]
draft/man7/hier.7 [new file with mode: 0644]
draft/man7/locale.7 [new file with mode: 0644]
draft/man7/netlink.7 [deleted file]
draft/man7/rtnetlink.7 [deleted file]
release/man2/fallocate.2
release/man2/get_mempolicy.2
release/man2/getcpu.2
release/man2/madvise.2
release/man2/mbind.2
release/man2/migrate_pages.2
release/man2/mlock.2
release/man2/mmap.2
release/man2/mmap2.2
release/man2/mremap.2
release/man2/msgctl.2
release/man2/msgget.2
release/man2/set_tid_address.2
release/man2/shmctl.2
release/man2/shmget.2
release/man2/splice.2
release/man2/vm86.2
release/man3/__setfpucw.3
release/man3/alloca.3
release/man3/catgets.3
release/man3/catopen.3
release/man3/dl_iterate_phdr.3
release/man3/fenv.3
release/man3/malloc_info.3 [new file with mode: 0644]
release/man3/mq_receive.3
release/man3/netlink.3
release/man3/posix_memalign.3
release/man3/queue.3
release/man3/realpath.3
release/man3/resolver.3
release/man3/shm_open.3
release/man5/charmap.5
release/man5/dir_colors.5
release/man5/elf.5
release/man5/locale.5
release/man5/nscd.conf.5
release/man5/resolv.conf.5
release/man5/services.5
release/man5/slabinfo.5
release/man7/futex.7
release/man7/hier.7
release/man7/iso_8859-1.7
release/man7/locale.7
release/man8/ld.so.8

diff --git a/draft/man2/get_mempolicy.2 b/draft/man2/get_mempolicy.2
new file mode 100644 (file)
index 0000000..19585d4
--- /dev/null
@@ -0,0 +1,116 @@
+.\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
+.\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
+.\"
+.\" %%%LICENSE_START(VERBATIM_PROF)
+.\" 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.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
+.\"
+.\" 2006-02-03, mtk, substantial wording changes and other improvements
+.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
+.\"     more precise specification of behavior.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH GET_MEMPOLICY 2 2008\-08\-15 Linux "Linux Programmer's Manual"
+.SH 名前
+get_mempolicy \- プロセスの NUMA メモリのポリシーを取得する
+.SH 書式
+\fB#include <numaif.h>\fP
+.nf
+.sp
+\fBint get_mempolicy(int *\fP\fImode\fP\fB, unsigned long *\fP\fInodemask\fP\fB,\fP
+\fB                  unsigned long \fP\fImaxnode\fP\fB, unsigned long \fP\fIaddr\fP\fB,\fP
+\fB                  unsigned long \fP\fIflags\fP\fB);\fP
+.sp
+\fI\-lnuma\fP でリンクする。
+.fi
+.SH 説明
+\fBget_mempolicy\fP()  は、呼び出し元プロセスもしくは指定されたメモリアドレスの NUMA ポリシーを \fIflags\fP
+の設定に従って取得する。
+
+NUMA (非対称メモリアクセス) マシンでは、CPU により メモリコントローラが異なり、距離も異なっている。
+メモリポリシーは、どのノードからメモリをそのプロセスに 割り当てるかを定めるものである。
+
+\fIflags\fP に 0 が指定された場合、 (\fBset_mempolicy\fP(2)  で設定された)
+呼び出し元プロセスのデフォルトポリシーに関する情報を返す。 返されたポリシー [\fImode\fP と \fInodemask\fP] を
+\fBset_mempolicy\fP(2)  に渡すことで、そのプロセスのポリシーを \fBget_mempolicy\fP()
+を呼び出した時点の状態に戻すことができる。
+
+\fIflags\fP に \fBMPOL_F_MEMS_ALLOWED\fP (Linux 2.6.24 以降で利用可能) を指定すると、 \fImode\fP
+引き数は無視され、 そのプロセスがその後の \fBmbind\fP(2)  や \fBset_mempolicy\fP(2)  で [\fIモードフラグ\fP
+が指定されていない場合に ] 指定できるノード (メモリ) の集合が \fInodemask\fP に返される。 \fBMPOL_F_MEMS_ALLOWED\fP
+を、 \fBMPOL_F_ADDR\fP や \fBMPOL_F_NODE\fP と同時に指定することはできない。
+
+\fIflags\fP に \fBMPOL_F_ADDR\fP が指定された場合、 \fIaddr\fP
+で指定されたメモリアドレスに適用されているポリシーに関する情報を返す。 \fBmbind\fP(2)  や \fBnuma\fP(3)
+で説明されているヘルパー関数を使って、 \fIaddr\fP を含むメモリ領域に対するポリシーが設定されていた場合には、
+返されるポリシーはプロセスのデフォルトポリシーと違うことがある。
+
+\fImode\fP 引き数が NULL でない場合、 \fBget_mempolicy\fP()  は要求された NUMA ポリシーのモードと追加の
+\fIモードフラグ\fP を \fImode\fP が指す場所に格納する。 \fInodemask\fP が NULL 以外の場合、そのポリシーに対応するノードマスクを
+この引き数が指す場所に格納する。 \fImaxnode\fP には \fInodemask\fP に格納できるノード ID の数、つまり最大ノード ID に 1
+を足した値を指定する。 \fImaxnode\fP で指定された値は常に \fIsizeof(unsigned long)\fP の倍数に切り上げられる。
+
+\fIflags\fP で \fBMPOL_F_NODE\fP と \fBMPOL_F_ADDR\fP の両方が指定された場合、 \fBget_mempolicy\fP()
+はアドレス \fIaddr\fP が割り当てられているノードのノード ID を \fImode\fP が指す場所に入れて返す。
+指定されたアドレスにどのページもまだ割り当てられていない場合、 \fBget_mempolicy\fP()
+は、あたかもそのプロセスがそのアドレスに対して読み込みアクセスを 実行したかのようにページの割り当てを行い、ページが割り当てられた ノードの ID
+を返す。
+
+.\" Note:  code returns next interleave node via 'mode' argument -Lee Schermerhorn
+\fIflags\fP で \fBMPOL_F_NODE\fP は指定されたが、 \fBMPOL_F_ADDR\fP は指定されていない場合で、かつ
+そのプロセスの現在のポリシーが \fBMPOL_INTERLEAVE\fP の場合、 \fBget_mempolicy\fP()
+は、そのプロセスに対して割り当てられたカーネルの内部ページで 次にインターリーブ用に使用されるノードのノード ID を、 NULL でない
+\fImode\fP 引き数が指す場所に入れて返す。 読み込みアクセス用として \fBMAP_PRIVATE\fP フラグ付きで \fBmmap\fP(2)
+したプロセスメモリ領域や、 任意のアクセス用として \fBMAP_SHARED\fP フラグ付きで \fBmmap\fP(2)
+したメモリ領域の、メモリマップされたファイルに対するページも 上記のプロセスに対して割り当てられたページに含まれる。
+
+他のフラグは予約されている。
+
+設定可能なポリシーの概要については \fBset_mempolicy\fP(2)  を参照。
+.SH 返り値
+成功すると、 \fBget_mempolicy\fP()  は 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
+.SH エラー
+.TP 
+\fBEFAULT\fP
+\fInodemask\fP と \fImaxnode\fP で指定されたメモリ領域の一部または全部が、 呼び出し元がアクセス可能なアドレス空間外を指している。
+.TP 
+\fBEINVAL\fP
+\fImaxnode\fP で指定された値がシステムがサポートするノード ID の数よりも少ない。 または、 \fIflags\fP に
+\fBMPOL_F_NODE\fP でも \fBMPOL_F_ADDR\fP でもない値が指定された。 または、 \fIflags\fP に \fBMPOL_F_ADDR\fP
+が指定されており、 \fIaddr\fP が NULL である。 または、 \fIflags\fP に \fBMPOL_F_ADDR\fP がされておらず、
+\fIaddr\fP が NULL でない。 または、 \fIflags\fP に \fBMPOL_F_NODE\fP が指定されており、 \fBMPOL_F_ADDR\fP
+が指定されておらず、 プロセスの現在のポリシーが \fBMPOL_INTERLEAVE\fP でない。 または、 \fIflags\fP に
+\fBMPOL_F_MEMS_ALLOWED\fP が指定されており、さらに \fBMPOL_F_ADDR\fP か \fBMPOL_F_NODE\fP
+のいずれかが指定されている。 (他にも \fBEINVAL\fP となる場合がある。)
+.SH バージョン
+\fBget_mempolicy\fP()  システムコールはバージョン 2.6.7 で Linux カーネルに追加された。
+.SH 準拠
+このシステムコールは Linux 固有である。
+.SH 注意
+ライブラリによるサポートについては \fBnuma\fP(7)  を参照。
+.SH 関連項目
+\fBgetcpu\fP(2), \fBmbind\fP(2), \fBmmap\fP(2), \fBset_mempolicy\fP(2), \fBnuma\fP(3),
+\fBnuma\fP(7), \fBnumactl\fP(8)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/getcpu.2 b/draft/man2/getcpu.2
new file mode 100644 (file)
index 0000000..a02eb11
--- /dev/null
@@ -0,0 +1,118 @@
+.\" This man page is Copyright (C) 2006 Andi Kleen <ak@muc.de>.
+.\"
+.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
+.\" Permission is granted to distribute possibly modified copies
+.\" of this page provided the header is included verbatim,
+.\" and in case of nontrivial modification author and date
+.\" of the modification is added to the header.
+.\" %%%LICENSE_END
+.\"
+.\" 2008, mtk, various edits
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH GETCPU 2 2012\-07\-13 Linux "Linux Programmer's Manual"
+.SH 名前
+getcpu \- 呼び出し元スレッドが動作している CPU と NUMA ノードを判定する
+.SH 書式
+.nf
+\fB#include <linux/getcpu.h>\fP
+.sp
+\fBint getcpu(unsigned *\fP\fIcpu\fP\fB, unsigned *\fP\fInode\fP\fB, struct getcpu_cache *\fP\fItcache\fP\fB);\fP
+.fi
+
+\fI注\fP: このシステムコールには glibc のラッパー関数はない。「注意」の節を参照。
+.SH 説明
+\fBgetcpu\fP() システムコールは、呼び出し元のスレッドやプロセスが
+現在動作しているプロセッサやノードの情報を特定し、
+それぞれ引き数 \fIcpu\fP と \fInode\fP が指す整数に書き込む。
+プロセッサ情報は CPU を識別するための一意な小さな整数である。
+ノード情報は NUMAノードを識別するための一意な小さな整数である。
+\fIcpu\fP か \fInode\fP のいずれかが NULL であれば、
+その引き数に対応する情報の書き込みは行われない。
+
+このシステムコールの 3 番目の引き数は現在は使われていない
+(「注意」を参照)。
+
+\fIcpu\fP に格納された情報が最新だと保証できるのは、システムコールが呼ばれ
+た時点だけである。\fBsched_setaffinity\fP(2) を使って CPU affinity が固定
+されていない限り、カーネルはいつでも CPU を変更してもよい (スケジューラ
+はキャッシュが有効に働くように CPU の移動を最小限にしようとするので、
+通常は CPU が変更されることはないが、起きる可能性はある)。
+\fIcpu\fP や \fInode\fP で返された情報が呼び出しが返った時点ですでに
+最新の状況と異なる可能性があり、呼び出し元はこの可能性を考慮して
+おかなければならない。
+.SH 返り値
+成功すると、0 を返す。
+エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
+.SH エラー
+.TP 
+\fBEFAULT\fP
+引き数が呼び出したプロセスのアドレス空間外を指している。
+.SH バージョン
+\fBgetcpu\fP() はカーネル 2.6.19 で x86_64 と i386 向けに追加された.
+.SH 準拠
+\fBgetcpu\fP() は Linux 固有である。
+.SH 注意
+Linux はこのシステムコールを可能な限り早く実行しようとする。
+\fBgetcpu\fP() は、CPU 毎のデータに対する最適化や NUMA 環境での最適化を
+プログラムが行えるようにすることを目的として実装されているからである。
+
+glibc はこのシステムコールに対するラッパー関数を提供していない。
+\fBsyscall\fP(2) を使って呼び出すか、
+代わりに \fBsched_getcpu\fP(3) を使用すること。
+
+.\" commit 4307d1e5ada595c87f9a4d16db16ba5edb70dcb1
+.\" Author: Ingo Molnar <mingo@elte.hu>
+.\" Date:   Wed Nov 7 18:37:48 2007 +0100
+.\" x86: ignore the sys_getcpu() tcache parameter
+.\"
+.\" ===== Before kernel 2.6.24: =====
+.\" .I tcache
+.\" is a pointer to a
+.\" .IR "struct getcpu_cache"
+.\" that is used as a cache by
+.\" .BR getcpu ().
+.\" The caller should put the cache into a thread-local variable
+.\" if the process is multithreaded,
+.\" because the cache cannot be shared between different threads.
+.\" .I tcache
+.\" can be NULL.
+.\" If it is not NULL
+.\" .BR getcpu ()
+.\" will use it to speed up operation.
+.\" The information inside the cache is private to the system call
+.\" and should not be accessed by the user program.
+.\" The information placed in the cache can change between kernel releases.
+.\"
+.\" When no cache is specified
+.\" .BR getcpu ()
+.\" will be slower,
+.\" but always retrieve the current CPU and node information.
+.\" With a cache
+.\" .BR getcpu ()
+.\" is faster.
+.\" However, the cached information is only updated once per jiffy (see
+.\" .BR time (7)).
+.\" This means that the information could theoretically be out of date,
+.\" although in practice the scheduler's attempt to maintain
+.\" soft CPU affinity means that the information is unlikely to change
+.\" over the course of the caching interval.
+\fItcache\fP 引き数は Linux 2.6.24 以降では使用されない。以前のバージョン
+のカーネルでは、この引き数が NULL 以外の場合、この引き数には、呼び出し
+元が割り当てたスレッド専用の記憶領域 (thread\-local storage) 内のバッファ
+を指すポインタが指定され、このバッファは \fBgetcpu\fP() 用のキャッシュ機構
+を提供するために利用されていた。非常に低い確率だが古い情報を返してしま
+うデメリットはあるものの、このキャッシュを使うことで \fBgetcpu\fP() システ
+ムコールを高速化できた。このキャッシュ機構はCPU 間でのスレッドの移動時
+に問題になると考えられ、この引き数は今では無視されるようになっている。
+.SH 関連項目
+\fBmbind\fP(2), \fBsched_setaffinity\fP(2), \fBset_mempolicy\fP(2),
+\fBsched_getcpu\fP(3), \fBcpuset\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/mbind.2 b/draft/man2/mbind.2
new file mode 100644 (file)
index 0000000..60b7eb6
--- /dev/null
@@ -0,0 +1,216 @@
+.\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
+.\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
+.\"
+.\" %%%LICENSE_START(VERBATIM_PROF)
+.\" 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.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
+.\"
+.\" 2006-02-03, mtk, substantial wording changes and other improvements
+.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
+.\"    more precise specification of behavior.
+.\"
+.\" FIXME
+.\" Linux 3.8 added the following, which need to be documented.
+.\" And do they also apply for move_pages()?
+.\"
+.\"       MPOL_LOCAL
+.\"                commit 479e2802d09f1e18a97262c4c6f8f17ae5884bd8
+.\"                Author: Peter Zijlstra <a.p.zijlstra@chello.nl>
+.\"                Date:   Thu Oct 25 14:16:28 2012 +0200
+.\"
+.\"                commit f2a07f40dbc603c15f8b06e6ec7f768af67b424f
+.\"                Author: Hugh Dickins <hughd@google.com>
+.\"                Date:   Wed Jan 2 02:01:33 2013 -0800
+.\"
+.\"        MPOL_MF_LAZY
+.\"                commit b24f53a0bea38b266d219ee651b22dba727c44ae
+.\"                Author: Lee Schermerhorn <lee.schermerhorn@hp.com>
+.\"                Date:   Thu Oct 25 14:16:32 2012 +0200
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MBIND 2 2008\-08\-15 Linux "Linux Programmer's Manual"
+.SH 名前
+mbind \- メモリ領域に対してメモリポリシーを設定する
+.SH 書式
+.nf
+\fB#include <numaif.h>\fP
+.sp
+\fBint mbind(void *\fP\fIaddr\fP\fB, unsigned long \fP\fIlen\fP\fB, int \fP\fImode\fP\fB,\fP
+\fB          unsigned long *\fP\fInodemask\fP\fB, unsigned long \fP\fImaxnode\fP\fB,\fP
+\fB          unsigned \fP\fIflags\fP\fB);\fP
+.sp
+\fI\-lnuma\fP でリンクする。
+.fi
+.SH 説明
+\fBmbind\fP()  は、 \fIaddr\fP から始まる長さ \fIlen\fP バイトの範囲のメモリに NUMA メモリポリシーを設定する。 NUMA
+ポリシーはポリシーモードと 0 個以上のノードから構成される。 メモリポリシーはどのノードからメモリを割り当てるかを決定する。
+
+\fIaddr\fP と \fIlen\fP で指定されたメモリ範囲に、 メモリの「無名」領域 \(em \fBMAP_ANONYMOUS\fP 付きの
+\fBmmap\fP(2)  システムコールを使って作成されたメモリ領域 \(em や \fBMAP_PRIVATE\fP 付きの \fBmmap\fP(2)
+を使ってマップされたメモリマップ・ファイルが含まれている場合、 ページが指定されたポリシーに基づいて割り当てられるのは、アプリケーション
+がそのページへの書き込み (データの格納) を行った時だけである。 無名領域の場合、最初の読み出しアクセスの際には カーネル内の全データが 0
+である共有ページが使用される。 \fBMAP_PRIVATE\fP でマップされたファイルの場合、最初の読み出しアクセスがあると、
+ページ割り当てが発生するきっかけとなったプロセスのデフォルトポリシー にしたがってページの割り当てが行われる。
+ページ割り当てのきっかけとなったプロセスは、 \fBmbind\fP()  を呼び出したプロセスと同じとは限らない。
+
+指定されたメモリ範囲内にある \fBMAP_SHARED\fP のマッピングでは指定されたポリシーは無視され、
+ページ割り当てが発生するきっかけとなったプロセスのデフォルトポリシーに したがってページの割り当てが行われることになる。
+繰り返しになるが、ページ割り当てのきっかけとなったプロセスは、 \fBmbind\fP()  を呼び出したプロセスと同じとは限らない。
+
+指定されたメモリ範囲に、 \fBshmget\fP(2)  システムコールを使って作成されたり、 \fBshmat\fP(2)  システムコールを使って付加
+(attach) されたりした共有メモリ領域が 含まれる場合、無名メモリ領域や共有メモリ領域に対するページ割り当ては、
+共有メモリセグメントへポリシーの設定を行ったプロセスがページ割り当て のきっかけとなったかに関わらず、指定されたポリシーにしたがって割り当て
+が行われる。 しかしながら、共有メモリ領域が \fBSHM_HUGETLB\fP フラグを指定して作成された場合には、ヒュージページ (huge page)
+の割り当てが 指定されたポリシーにしたがって行われるのは、その領域に対して \fBmbind\fP()
+を呼び出したプロセスがページ割り当てのきっかけとなった場合のみである。
+
+デフォルトでは、 \fBmbind\fP()  は新規のメモリ割り当てに対してのみ効果を持つ。
+ポリシーが設定される前にすでに使用されている範囲内のページに対しては、 ポリシーは影響しない。 このデフォルトの動作は、以下で説明するフラグ
+\fBMPOL_MF_MOVE\fP や \fBMPOL_MF_MOVE_ALL\fP により上書きされる可能性がある。
+
+\fImode\fP 引き数には、 \fBMPOL_DEFAULT\fP, \fBMPOL_BIND\fP, \fBMPOL_INTERLEAVE\fP,
+\fBMPOL_PREFERRED\fP のいずれか一つを指定しなければならない。 \fBMPOL_DEFAULT\fP 以外のポリシーモードの場合、呼び出し元は
+\fInodemask\fP 引き数でそのポリシーモードを適用するノードを指定する必要がある。
+
+\fImode\fP 引き数には、追加で \fIモードフラグ\fP を含めることもできる。 サポートされている \fIモードフラグ\fP は以下の通りである。
+.TP 
+\fBMPOL_F_STATIC_NODES\fP (Linux\-2.6.26 以降)
+空でない \fInodemask\fP は、物理ノード ID である。 Linux では、そのプロセスが異なる CPU 集合コンテキスト (cpuset
+context)  に移動した場合でも、そのプロセスの現在の CPU 集合コンテキストで 許可されているノード集合が変化した場合でも、
+\fInodemask\fP をマッピングし直すことはない。
+.TP 
+\fBMPOL_F_RELATIVE_NODES\fP (Linux\-2.6.26 以降)
+空でない \fInodemask\fP は、そのプロセスの現在の CPU 集合で許可されているノード ID 集合 における相対的なノード ID である。
+.PP
+\fInodemask\fP は、最大で \fImaxnode\fP ビットから構成されるノードのビットマスクを指す。 ビットマスクの大きさは、直近の
+\fIsizeof(unsigned long)\fP の倍数に切り上げられるが、カーネルが使用するのは \fImaxnode\fP 個までのビットだけである。
+NULL 値の \fInodemask\fP もしくは値が 0 の \fImaxnode\fP はノードの空集合を表す。 \fImaxnode\fP の値が 0 の場合、
+\fInodemask\fP 引き数は無視される。 \fInodemask\fP が必須の場面では、 \fInodemask\fP に、オンラインで、そのプロセスの現在の
+CPU 集合コンテキストで 許可されており (\fBMPOL_F_STATIC_NODES\fP モードフラグが指定されていない場合)、メモリがあるノードが
+少なくとも一つ入っていなければならない。
+
+モード \fBMPOL_DEFAULT\fP はデフォルトではないプロセスのメモリポリシーを削除し、 デフォルトの動作に戻すことを指定するものである。
+\fBmbind\fP()  経由で、あるメモリ領域に対して \fBMPOL_DEFAULT\fP
+が適用された場合、プロセスのデフォルトポリシーを使用することを意味する。 プロセスのデフォルトポリシーは、 \fBset_mempolicy\fP(2)
+で変更されているかもしれない。 プロセスのポリシーのモードも \fBMPOL_DEFAULT\fP の場合、システム全体のデフォルトポリシーが使用される。
+システム全体のデフォルトポリシーでは、割り当てのきっかけとなった CPU のノードからページの割り当てを行う。 \fBMPOL_DEFAULT\fP
+では、引き数 \fInodemask\fP と \fImaxnode\fP にノードの空集合を指定しなければならない。
+
+\fBMPOL_BIND\fP は厳しいポリシーで、メモリ割り当ては \fInodemask\fP に指定されたノードに限定される。
+他のノードへの割り当ては行われない。 \fInodemask\fP に 2 個以上のノードが指定された場合、ページの割り当ては ノード ID
+が数字として最小のノードから開始され、 そのノードに空きメモリがなくなるまでそのノードから
+ページ割り当てが行われる。そのノードに空きメモリがなくなったら、 次に小さなノード ID を持つノードからページ割り当てが行われる。 これを、
+\fInodemask\fP で指定された全てのノードで空きメモリがなくなるまで繰り返す。 \fInodemask\fP
+で指定された以外のノードからはページの割り当ては行われない。
+
+\fBMPOL_INTERLEAVE\fP は、メモリ割り当てが \fInodemask\fP に指定されたノード間で交互に行われることを指定するものである。
+このポリシーでは、複数のノードにページを広げて配置し、これらのページへの メモリアクセスを分散することで、遅延ではなく、帯域を最適化する。
+効果を得るには、メモリ領域をある程度大きくすべきであり、 メモリアクセスのパターンがかなり均一な場合でも 少なくとも 1MB 以上にすべきである。
+このモードでも、一つのページへのアクセスに関しては 一つのノードのメモリ帯域が上限となることは変わりない。
+
+\fBMPOL_PREFERRED\fP は、割り当て時に優先されるノードを設定する。 カーネルはまず優先ノードにページ割り当てを行おうとし、
+優先ノードに空きメモリが少ない場合に他のノードに割り当てを行う。 \fInodemask\fP に複数のノード ID が指定された場合は、
+\fInodemask\fP 内の最初のノードが優先ノードとして選択される。 引き数 \fInodemask\fP, \fImaxnode\fP
+で空集合が指定された場合は、割り当てのきっかけとなった CPU のノードに メモリ割り当てが行われる。 \fBmbind\fP(2)
+で、あるメモリ領域に対して「ローカルからの割り当て (local allocation)」を 指定する方法はこれしかない。
+
+.\" According to the kernel code, the following is not true
+.\" --Lee Schermerhorn
+.\" In 2.6.16 or later the kernel will also try to move pages
+.\" to the requested node with this flag.
+\fIflags\fP に \fBMPOL_MF_STRICT\fP が 指定され、 \fImode\fP が \fBMPOL_DEFAULT\fP でない場合、
+指定されたポリシーに従っていないメモリ領域にページが存在すると、 \fBmbind\fP()  はエラー \fBEIO\fP で失敗する。
+
+\fIflags\fP に \fBMPOL_MF_MOVE\fP が指定されると、カーネルはそのメモリ領域内の既存の全てのページを移動し、
+指定されたポリシーに従うようにしようとする。 他のプロセスと共有されているページは移動されない。 \fBMPOL_MF_STRICT\fP
+も指定された場合、移動できなかったページがあると、 \fBmbind\fP()  はエラー \fBEIO\fP で失敗する。
+
+.\" ---------------------------------------------------------------
+\fIflags\fP に \fBMPOL_MF_MOVE_ALL\fP が指定されると、カーネルはそのメモリ領域内の既存の全てのページを、
+他のプロセスがページを使用しているかどうかに関わらず移動する。 このフラグを使用するには、呼び出し元のプロセスは特権 (\fBCAP_SYS_NICE\fP)
+を持っていなければならない。 \fBMPOL_MF_STRICT\fP も指定された場合、移動できなかったページがあると、 \fBmbind\fP()  はエラー
+\fBEIO\fP で失敗する。
+.SH 返り値
+.\" ---------------------------------------------------------------
+成功すると、 \fBmbind\fP()  は 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
+.SH エラー
+.\"  I think I got all of the error returns.  --Lee Schermerhorn
+.TP 
+\fBEFAULT\fP
+\fInodemask\fP と \fImaxnode\fP で指定されたメモリ領域の一部または全部が、 呼び出し元がアクセス可能なアドレス空間外を指している。
+もしくは指定されたメモリ領域にマップされていない部分 (unmapped hole)  があった、
+.TP 
+\fBEINVAL\fP
+.\" As at 2.6.23, this limit is "a page worth of bits", e.g.,
+.\" 8 * 4096 bits, assuming a 4kB page size.
+\fIflags\fP や \fImode\fP に不正な値が指定された。 \fIaddr + len\fP が \fIaddr\fP より小さい。 \fIaddr\fP
+がシステムのページサイズの倍数になっていない。 または \fImode\fP が \fBMPOL_DEFAULT\fP で \fInodemask\fP
+に空でない集合が指定された。 \fImode\fP が \fBMPOL_BIND\fP か \fBMPOL_INTERLEAVE\fP で \fInodemask\fP
+が空であった。 \fImaxnode\fP がカーネルに適用された上限を超えている。 \fInodemask\fP に、サポートされている最大ノード ID
+より大きいノードが指定された。 \fInodemask\fP に、オンラインで、かつそのプロセスの現在の CPU 集合コンテキストで
+許可されているノードが一つも含まれていないか、 メモリを含むノードが一つも指定されていない。 \fImode\fP 引き数に
+\fBMPOL_F_STATIC_NODES\fP と \fBMPOL_F_RELATIVE_NODES\fP の両方が指定された。
+.TP 
+\fBEIO\fP
+\fBMPOL_MF_STRICT\fP が指定されたが、このポリシーに従っていないノードに すでにページが存在していた。 もしくは
+\fBMPOL_MF_MOVE\fP か \fBMPOL_MF_MOVE_ALL\fP が指定されたが、カーネルが指定された領域内の既存の全てのページを
+移動することができなかった。
+.TP 
+\fBENOMEM\fP
+利用可能なカーネルメモリが十分でなかった。
+.TP 
+\fBEPERM\fP
+.\" ---------------------------------------------------------------
+\fIflags\fP 引き数に \fBMPOL_MF_MOVE_ALL\fP フラグが含まれているが、呼び出し元が \fBCAP_SYS_NICE\fP
+特権を持たない。
+.SH バージョン
+\fBmbind\fP()  システムコールはバージョン 2.6.7 で Linux カーネルに追加された。
+.SH 準拠
+このシステムコールは Linux 固有である。
+.SH 注意
+ライブラリによるサポートについては \fBnuma\fP(7)  を参照。
+
+NUMA ポリシーは、 \fBMAP_SHARED\fP フラグが指定されてマップされたメモリマップ・ファイルの領域では サポートされていない。
+
+\fBMPOL_DEFAULT\fP モードは、 \fBmbind\fP()  と \fBset_mempolicy\fP(2)  で異なる効果を持つことができる。
+\fBset_mempolicy\fP(2)  で \fBMPOL_DEFAULT\fP が指定された場合、そのプロセスのポリシーはシステムの
+デフォルトポリシー、すなわちローカルからの割り当て、に戻る。 \fBmbind\fP()  を使ってメモリのある領域に \fBMPOL_DEFAULT\fP
+が指定された場合、その範囲に対してそれ以降に行われるページの割り当てでは、 \fBset_mempolicy\fP(2)
+で設定したのと同じように、そのプロセスのポリシーが適用される。 これにより、特定のメモリ領域についてだけ明示的なポリシーを削除し、
+デフォルトのポリシーに「戻す」ことができる。 あるメモリ領域に対して「ローカルからの割り当て」を明示的に設定するには、 \fImode\fP に
+\fBMPOL_PREFERRED\fP を指定し、 \fInodemask\fP に空集合のノードを指定すればよい。 この方法は
+\fBset_mempolicy\fP(2)  でも通用する。
+
+2.6.16 でヒュージページ・ポリシーへの対応が追加された。 インターリーブ・ポリシーがヒュージページのマッピングで効果を持つには、
+ポリシーが適用されるメモリが数十メガバイト以上である必要がある。
+
+\fBMPOL_MF_STRICT\fP はヒュージページのマッピングでは無視される。
+
+\fBMPOL_MF_MOVE\fP と \fBMPOL_MF_MOVE_ALL\fP は Linux 2.6.16 以降でのみ利用可能である。
+.SH 関連項目
+\fBget_mempolicy\fP(2), \fBgetcpu\fP(2), \fBmmap\fP(2), \fBset_mempolicy\fP(2),
+\fBshmat\fP(2), \fBshmget\fP(2), \fBnuma\fP(3), \fBcpuset\fP(7), \fBnuma\fP(7),
+\fBnumactl\fP(8)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/migrate_pages.2 b/draft/man2/migrate_pages.2
new file mode 100644 (file)
index 0000000..24aae38
--- /dev/null
@@ -0,0 +1,103 @@
+.\" Copyright 2009 Intel Corporation
+.\"                Author: Andi Kleen
+.\" Based on the move_pages manpage which was
+.\" This manpage is Copyright (C) 2006 Silicon Graphics, Inc.
+.\"                               Christoph Lameter
+.\"
+.\" %%%LICENSE_START(VERBATIM_TWO_PARA)
+.\" 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.
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MIGRATE_PAGES 2 2012\-08\-01 Linux "Linux Programmer's Manual"
+.SH 名前
+migrate_pages \- プロセスの全ページを別のノード集合に移動する
+.SH 書式
+.nf
+\fB#include <numaif.h>\fP
+.sp
+\fBlong migrate_pages(int \fP\fIpid\fP\fB, unsigned long \fP\fImaxnode,\fP
+\fB                   const unsigned long *\fP\fIold_nodes,\fP
+\fB                   const unsigned long *\fP\fInew_nodes\fP\fB);\fP
+.fi
+.sp
+\fI\-lnuma\fP とリンクする。
+.SH 説明
+\fBMIGRATE_PAGES\fP() は、メモリノード \fIold_nodes\fP にあるプロセス \fIpid\fP
+の全ページを、メモリノード \fInew_nodes\fP に移動しようとする。\fIold_nodes\fP で
+指定されたメモリノードに置かれていないページは移動されない。
+カーネルは、 \fInew_nodes\fP への移動の際に、 \fIold_nodes\fP 内の相対的な
+トポロジー関係を可能な限り維持しようとする。
+
+引き数 \fIold_nodes\fP と \fInew_nodes\fP は、最大で \fImaxnode\fP ビットから
+構成されるノード番号のビットマスクへのポインタである。
+各ビットマスクは符号なし \fIlong\fP 整数の配列として管理される
+(\fImaxnode\fP で指定された長さを越えた部分のビットは無視される)。
+引き数 \fImaxnode\fP は最大ノード番号であり、ビットマスクの長さに 1 を
+加えた値となる (これは \fBmbind\fP(2) と同じだが、 \fBselect\fP(2) とは違う)。
+
+引き数 \fIpid\fP は、移動を行うページの所有者のプロセス ID である。
+別のプロセスのページを移動するには、呼び出したプロセスが特権
+(\fBCAP_SYS_NICE\fP) を持っているか、呼び出したプロセスの実ユーザ ID か
+実効ユーザ ID がページ移動の対象プロセスの実ユーザ ID か saved\-set
+ユーザ ID と一致していなければならない。\fIpid\fP が 0 の場合、
+\fBmigrate_pages\fP() は呼び出したプロセスのページを移動する。
+
+別のプロセスと共有しているページは、呼び出したプロセスが
+\fBCAP_SYS_NICE\fP 特権を持っている場合にのみ移動される。
+.SH 返り値
+\fBmigrate_pages\fP() は、移動できなかったページ数を返す
+(つまり、移動に成功した場合は返り値は 0 となる)。
+エラーの場合、 \-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
+.SH エラー
+.TP 
+\fBEPERM\fP
+\fIpid\fP で指定されたプロセスのページを移動するのに必要な特権
+(\fBCAP_SYS_NICE\fP) がなかった。または、指定された対象ノードにアクセス
+するのに必要な権限 (\fBCAP_SYS_NICE\fP) がなかった。
+.TP 
+\fBESRCH\fP
+.\" FIXME There are other errors
+プロセス ID が \fIpid\fP のプロセスが見つからなかった。
+.SH バージョン
+\fBmigrate_pages\fP() システムコールは Linux 2.6.16 で初めて登場した。
+.SH 準拠
+このシステムコールは Linux 固有である。
+.SH 注意
+ライブラリによるサポートについては \fBnuma\fP(7)  を参照。
+
+呼び出し元プロセスの CPU 集合で許可されているノード集合を取得するには、
+\fBMPOL_F_MEMS_ALLOWED\fP フラグを付けて \fBget_mempolicy\fP(2) を使うこと。
+この情報は、手動/自動に限らず CPU 集合の再構成によりいつでも
+変更されることがある点に注意してほしい。
+
+\fBmigrate_pages\fP を使用すると、ページが置かれる場所 (ノード) が、指定
+されたアドレスに対して設定されたメモリポリシー (\fBmbind\fP(2) 参照) や
+指定されたプロセスに対して設定されたメモリポリシー
+(\fBset_mempolicy\fP(2) 参照) に違反する状況になる可能性がある。
+すなわち、メモリポリシーによる制約は \fBmigrate_pages\fP() による移動先
+ノードの選択には適用されないということである。
+
+ヘッダファイル \fI<numaif.h>\fP は glibc には含まれておらず、 \fIlibnuma\-devel\fP
+か同様のパッケージをインストールする必要がある。
+.SH 関連項目
+\fBget_mempolicy\fP(2), \fBmbind\fP(2), \fBset_mempolicy\fP(2), \fBnuma\fP(3),
+\fBnuma_maps\fP(5), \fBcpuset\fP(7), \fBnuma\fP(7), \fBmigratepages\fP(8),
+\fBnuma_stat\fP(8)
+
+Linux カーネルソースの \fIDocumentation/vm/page_migration\fP
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/mlock.2 b/draft/man2/mlock.2
new file mode 100644 (file)
index 0000000..5e2ead1
--- /dev/null
@@ -0,0 +1,195 @@
+.\" Copyright (C) Michael Kerrisk, 2004
+.\"    using some material drawn from earlier man pages
+.\"    written by Thomas Kuhn, Copyright 1996
+.\"
+.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MLOCK 2 2011\-09\-14 Linux "Linux Programmer's Manual"
+.SH 名前
+mlock \- メモリのロックとロック解除を行う
+.SH 書式
+.nf
+\fB#include <sys/mman.h>\fP
+.sp
+\fBint mlock(const void *\fP\fIaddr\fP\fB, size_t \fP\fIlen\fP\fB);\fP
+\fBint munlock(const void *\fP\fIaddr\fP\fB, size_t \fP\fIlen\fP\fB);\fP
+.sp
+\fBint mlockall(int \fP\fIflags\fP\fB);\fP
+\fBint munlockall(void);\fP
+.fi
+.SH 説明
+\fBmlock\fP()  と \fBmlockall\fP()  はそれぞれ、呼び出し元プロセスの仮想アドレス空間の一部または全部を RAM
+上にロックし、メモリがスワップエリアにページングされるのを防ぐ。 \fBmunlock\fP()  と \fBmunlockall\fP()
+は逆の操作で、それぞれ呼び出し元プロセスの仮想アドレス空間の一部または全部を ロック解除する。つまり、指定された仮想アドレス範囲のページは
+カーネルメモリマネージャーから要求されればスワップアウトするようになる。 メモリのロックとロック解除はページ単位で行われる。
+.SS "mlock() と munlock()"
+\fBmlock\fP()  は \fIaddr\fP から始まる長さ \fIlen\fP バイトのアドレス範囲のページをロックする。 呼び出しが成功した場合には、
+指定されたアドレス範囲を含む全てのページは RAM に残り続けることが保証される。 これらのページは後でロック解除されるまで RAM
+に残り続けることが保証される。
+
+\fBmunlock\fP()  は、 \fIaddr\fP から始まる長さ \fIlen\fP バイトのアドレス範囲のページのロックを解除する。
+この呼び出しを行った後は、カーネルが、指定されたメモリ範囲を含む 全てのページを外部のスワップ空間に移動できるようになる。
+.SS "mlockall() と munlockall()"
+\fBmlockall\fP()  は呼び出し元プロセスのアドレス空間にマップされている全てのページを ロックする。これにはコード、データ、スタックの
+各セグメント、共有ライブラリ、カーネルのユーザー空間データ、 共有メモリ、メモリ・マップされたファイルが含まれる。
+システム・コールが成功した場合には全てのマップされたページは RAM に 残ることを保証される。 これらのページは後でロック解除されるまで RAM
+に残り続けることが保証される。
+
+\fIflags\fP 引数は以下の内容の一つまたは複数のビット OR から構成される:
+.TP  1.2i
+\fBMCL_CURRENT\fP
+現在、プロセスのアドレス空間にマップされている全てのページをロックする。
+.TP 
+\fBMCL_FUTURE\fP
+将来、プロセスのアドレス空間にマップされる全てのページをロックする。 例えば、ヒープ (heap) やスタックの成長により新しく必要になったページだけで
+なく、新しくメモリマップされたファイルや共有メモリ領域もロックされる。
+.PP
+\fBMCL_FUTURE\fP が指定されていると、以後のシステムコール (例えば、 \fBmmap\fP(2), \fBsbrk\fP(2),
+\fBmalloc\fP(3))  は、ロックするバイト数が許可された最大値 (下記参照) を超えた場合に 失敗する可能性がある。
+同様に、スタックの成長も失敗する可能性がある。 その場合、カーネルはスタックの拡張を拒否し、 \fBSIGSEGV\fP をプロセスに送る。
+
+\fBmunlockall\fP()  は、呼び出し元プロセスのアドレス空間にマッピングされている 全てのページをロック解除する。
+.SH 返り値
+成功した場合は、これらのシステムコールはゼロを返す。 エラーの場合は \-1 が返され、 \fIerrno\fP
+が適切に設定され、プロセスのアドレス空間におけるロックは変更されない。
+.SH エラー
+.TP 
+\fBENOMEM\fP
+(Linux 2.6.9 以降) 呼び出し元は非ゼロの ソフト資源制限 \fBRLIMIT_MEMLOCK\fP
+を持つが、制限が許可している以上のメモリをロックしようとした。 この制限は、プロセスが特権 (\fBCAP_IPC_LOCK\fP)
+を持っている場合は適用されない。
+.TP 
+\fBENOMEM\fP
+.\" In the case of mlock(), this check is somewhat buggy: it doesn't
+.\" take into account whether the to-be-locked range overlaps with
+.\" already locked pages.  Thus, suppose we allocate
+.\" (num_physpages / 4 + 1) of memory, and lock those pages once using
+.\" mlock(), and then lock the *same* page range a second time.
+.\" In the case, the second mlock() call will fail, since the check
+.\" calculates that the process is trying to lock (num_physpages / 2 + 2)
+.\" pages, which of course is not true.  (MTK, Nov 04, kernel 2.4.28)
+(Linux 2.4 以前) 呼び出し元プロセスが RAM の半分以上をロックしようとした。
+.TP 
+\fBEPERM\fP
+.\"SVr4 documents an additional EAGAIN error code.
+呼び出し側が特権を持っていないが、
+要求された操作を実行するには特権 (\fBCAP_IPC_LOCK\fP) が必要である。
+.LP
+\fBmlock\fP()  と \fBmunlock\fP()  用として:
+.TP 
+\fBEAGAIN\fP
+指定されたアドレス範囲の一部または全てをロックすることができなかった。
+.TP 
+\fBEINVAL\fP
+\fIstart\fP+\fIlen\fP の加算の結果が \fIstart\fP よりも小さかった
+(例えば、加算でオーバーフローが発生したなど)。
+.TP 
+\fBEINVAL\fP
+(Linux ではこの意味で使われない)  \fIaddr\fP がページサイズの倍数ではない。
+.TP 
+\fBENOMEM\fP
+指定されたアドレス範囲がプロセスのアドレス空間にマップされたページと 一致しない。
+.LP
+\fBmlockall\fP()  用として:
+.TP 
+\fBEINVAL\fP
+未知の \fIflags\fP が指定された。
+.LP
+\fBmunlockall\fP()  用として:
+.TP 
+\fBEPERM\fP
+(Linux 2.6.8 以前) 呼び出し元が権限 (\fBCAP_IPC_LOCK\fP)  を持っていない。
+.SH 準拠
+POSIX.1\-2001, SVr4.
+.SH 可用性
+\fBmlock\fP()  と \fBmunlock\fP()  が使用可能な POSIX システムでは \fB_POSIX_MEMLOCK_RANGE\fP が
+\fI<unistd.h>\fP で定義されている。 また、ページあたりのバイト数は、 \fI<limits.h>\fP
+で定義される定数 \fBPAGESIZE\fP から (定義されている場合)、もしくは \fIsysconf(_SC_PAGESIZE)\fP
+を呼び出すことで決定できる。
+
+.\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
+.\" -1: unavailable, 0: ask using sysconf().
+.\" glibc defines it to 1.
+\fBmlockall\fP()  と \fBmunlockall\fP()  が利用可能な POSIX システムでは、 \fB_POSIX_MEMLOCK\fP は
+\fI<unistd.h>\fP で 0 より大きい値に定義されている (\fBsysconf\fP(3)  も参照のこと)。
+.SH 注意
+メモリのロックの用途としては主に二つある: リアルタイム アルゴリズムと高いセキュリティの必要なデータ処理である。リアルタイムの
+アプリケーションは決定的なタイミングやスケジューリングを必要とするが、 ページングは予期しないプログラムの実行遅延をもたらす主要な要因となる。
+リアルタイムのアプリケーションはたいていは \fBsched_setscheduler\fP(2)  でリアルタイムスケジューラに変更される。
+暗号やセキュリティのソフトウェアはしばしばパスワードや秘密鍵のデータの ような重要なバイト列を扱う。ページングの結果、これらの秘密が
+スワップ用の固定媒体に転送されるかもしれない。そして、セキュリティ・ ソフトウェアが RAM 上の秘密を削除して終了したずっと後になっても、
+このスワップされたデータには敵がアクセスできる可能性がある (しかし、ラップトップといくつかのデスクトップコンピュータの サスペンドモードはシステムの
+RAM の内容をメモリのロックに関わらず ディスクに保存することに注意)。
+
+リアルタイムプロセスが \fBmlockall\fP()  を使ってページフォールトによる遅延を防ごうとする場合、
+関数呼び出しによってページフォールトが発生しないように、 時間制限の厳しい部分 (time\-critical section) に入る前に
+十分な量のロックされたスタックを確保しておく必要がある。 これを実現するには、十分な大きさの自動変数 (の配列) を確保し、
+これらのスタック用のページがメモリ上に確保されるようにこの配列に 書き込みを行う関数を用意し、これを呼び出せばよい。こうすることで、
+十分な量のページがスタックにマッピングされ、RAM にロックされる。 ダミーの書き込みを行うことによって、 時間制限の厳しい部分 (critical
+section) 内では書き込み時コピーによる ページフォールトさえも発生しないことが保証される。
+
+メモリロックは \fBfork\fP(2)  で作成された子プロセスには継承されず、 \fBexecve\fP(2)  が呼ばれたり、プロセスが終了した場合は
+自動的に削除される (ロック解除される)。
+
+あるアドレス範囲に対するメモリロックは、そのアドレス範囲が \fBmunmap\fP(2)  によってアンマップされた場合は削除される。
+
+メモリのロックは累積しない。 すなわち複数回 \fBmlock\fP()  や \fBmlockall\fP()  を呼び出してロックされたページでも、
+対応する範囲に対して \fBmunlock\fP()  を 1 回呼び出したり \fBmunlockall\fP()  を呼び出したりするだけでロック解除される。
+複数の場所や複数のプロセスにマップされているページは、少なくとも一つの場所、 一つのプロセスでロックされている限りは RAM に残り続ける。
+.SS "Linux での注意"
+Linux では、 \fBmlock\fP()  と \fBmunlock\fP()  は自動的に \fIaddr\fP
+を端数切り捨てにより一番近いページ境界へと丸める。 しかし POSIX.1\-2001 は \fIaddr\fP
+がページ境界に合っていることを要求する実装も許している。 そのため移植性を意図したアプリケーションではきちんと境界に合わせた方が良い。
+
+Linux 固有の \fI/proc/PID/status\fP ファイルの \fIVmLck\fP フィールドには、
+\fBmlock\fP(), \fBmlockall\fP() および \fBmmap\fP(2) \fBMAP_LOCKED\fP を使って、
+ID が \fIPID\fP のプロセスがロックしているメモリ量 (キロバイト単位) が
+表示される。
+.SS 制限と権限
+Linux 2.6.8 以前では、メモリをロックするためには特権 (\fBCAP_IPC_LOCK\fP)  が必要で、 ソフト資源制限
+\fBRLIMIT_MEMLOCK\fP はプロセスがどれだけのメモリをロックできるかの制限を定義する。
+
+Linux 2.6.9 以降では、特権を持つプロセスがロックできるメモリ量は無制限となり、 代わりにソフト資源制限 \fBRLIMIT_MEMLOCK\fP
+は特権を持たないプロセスがロックできるメモリ量の制限を定義する。
+.SH バグ
+2.4.17 までの 2.4 シリーズの Linux カーネルには、 \fBmlockall\fP()  \fBMCL_FUTURE\fP フラグが
+\fBfork\fP(2)  で継承されると言うバグがある。 これはカーネル 2.4.18 で修正された。
+
+.\" See the following LKML thread:
+.\" http://marc.theaimsgroup.com/?l=linux-kernel&m=113801392825023&w=2
+.\" "Rationale for RLIMIT_MEMLOCK"
+.\" 23 Jan 2006
+カーネル 2.6.9 以降では、特権を持ったプロセスが \fImlockall(MCL_FUTURE)\fP を呼び出した後で、特権をなくした場合 (例えば、
+実効 UID を 0 以外の値に変更するなどにより、 \fBCAP_IPC_LOCK\fP ケーパビリティを失った場合)、リソース上限
+\fBRLIMIT_MEMLOCK\fP に達すると、それ以降のメモリ割り当て (例えば \fBmmap\fP(2), \fBbrk\fP(2))  は失敗する。
+.SH 関連項目
+\fBmmap\fP(2), \fBsetrlimit\fP(2), \fBshmctl\fP(2), \fBsysconf\fP(3), \fBproc\fP(5),
+\fBcapabilities\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/mmap2.2 b/draft/man2/mmap2.2
new file mode 100644 (file)
index 0000000..57421f8
--- /dev/null
@@ -0,0 +1,83 @@
+.\" 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.
+.\"
+.\" 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
+.\"
+.\" Modified 31 Jan 2002, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"    Added description of mmap2
+.\" Modified, 2004-11-25, mtk -- removed stray #endif in prototype
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MMAP2 2 2012\-04\-16 Linux "Linux Programmer's Manual"
+.SH 名前
+mmap2 \- ファイルやデバイスをメモリにマップする
+.SH 書式
+.nf
+\fB#include <sys/mman.h>\fP
+.sp
+\fBvoid *mmap2(void *\fP\fIaddr\fP\fB, size_t \fP\fIlength\fP\fB, int \fP\fIprot\fP\fB,\fP
+\fB            int \fP\fIflags\fP\fB, int \fP\fIfd\fP\fB, off_t \fP\fIpgoffset\fP\fB);\fP
+.fi
+.SH 説明
+これはおそらくあなたが興味のあるシステムコールではないだろう。代わりに
+\fBmmap\fP(2) を見るとよい。そのページにはこのシステムコールを起動する glibc の
+ラッパー関数についての説明がある。
+
+\fBmmap2\fP() システムコールは \fBmmap\fP(2) と同じインターフェースを提供する。ただ
+し、最後の引き数には、ファイルのオフセットを (\fBmmap\fP(2) が行っている、バイト
+単位ではなく) 4096 バイトを単位として指定する。 これにより、32 ビットの
+\fIoff_t\fP を使うアプリケーションで (2^44 バイトまでの) 大きなファイルをマップ
+できるようになる。
+.SH 返り値
+成功した場合、 \fBmmap2\fP()  はマップされた領域へのポインタを返す。 エラーの場合は \-1 が返されて、 \fIerrno\fP
+が適切に設定される。
+.SH エラー
+.TP 
+\fBEFAULT\fP
+ユーザ空間からデータを取得するときに問題があった。
+.TP 
+\fBEINVAL\fP
+(ページサイズが 4096 バイトでないプラットフォームにおいて)  \fIoffset * 4096\fP がシステムのページサイズの倍数ではない。
+.PP
+\fBmmap2\fP() は \fBmmap\fP(2) に載っているエラーを返すこともある。
+.SH バージョン
+\fBmmap2\fP()  は、Linux 2.3.31 以降で使用可能である。
+.SH 準拠
+このシステムコールは Linux 独自である。
+.SH 注意
+現在では、glibc の \fBmmap\fP()  のラッパー関数は、 \fBmmap\fP(2)  システムコールではなく、このシステムコール
+(\fBmmap2\fP(2))  を起動する。
+
+.\" ia64 can have page sizes ranging from 4kB to 64kB.
+.\" On cris, it looks like the unit might also be the page size,
+.\" which is 8192 bytes. -- mtk, June 2007
+ia64 では、 \fIoffset\fP の単位は、実際にはシステムのページサイズであり、 4096 バイトではない。
+.SH 関連項目
+\fBgetpagesize\fP(2), \fBmmap\fP(2), \fBmremap\fP(2), \fBmsync\fP(2), \fBshm_open\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/mprotect.2 b/draft/man2/mprotect.2
new file mode 100644 (file)
index 0000000..0cf81dd
--- /dev/null
@@ -0,0 +1,190 @@
+.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
+.\" and Copyright (C) 1995 Michael Shields <shields@tembel.org>.
+.\"
+.\" %%%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 author of this work.
+.\" %%%LICENSE_END
+.\"
+.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
+.\" Modified 1997-05-31 by Andries Brouwer <aeb@cwi.nl>
+.\" Modified 2003-08-24 by Andries Brouwer <aeb@cwi.nl>
+.\" Modified 2004-08-16 by Andi Kleen <ak@muc.de>
+.\" 2007-06-02, mtk: Fairly substantial rewrites and additions, and
+.\" a much improved example program.
+.\" FIXME The following protection flags need documenting:
+.\"         PROT_SEM
+.\"         PROT_GROWSDOWN
+.\"         PROT_GROWSUP
+.\"         PROT_SAO (PowerPC)
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MPROTECT 2 2012\-08\-14 Linux "Linux Programmer's Manual"
+.SH 名前
+mprotect \- メモリ領域の保護を設定する
+.SH 書式
+.nf
+\fB#include <sys/mman.h>\fP
+.sp
+\fBint mprotect(void *\fP\fIaddr\fP\fB, size_t \fP\fIlen\fP\fB, int \fP\fIprot\fP\fB);\fP
+.fi
+.SH 説明
+\fBmprotect\fP()  は、区間 [\fIaddr\fP,\ \fIaddr\fP+\fIlen\fP\-1] のアドレス範囲を含む
+呼び出し元のプロセスのメモリページのアクセス保護を変更する。 \fIaddr\fP はページ境界に一致していなければならない。
+
+呼び出し元のプロセスがアクセス保護に違反するようなメモリアクセスを 行おうとすると、カーネルはシグナル \fBSIGSEGV\fP
+をそのプロセスに対して生成する。
+.PP
+\fIprot\fP には、 \fBPROT_NONE\fP か、以下のリストの \fBPROT_NONE\fP 以外の値をビット毎の論理和 (bitwize\-or)
+で指定する:
+.TP  1.1i
+\fBPROT_NONE\fP
+そのメモリには全くアクセスできない。
+.TP 
+\fBPROT_READ\fP
+そのメモリを読み取ることができる。
+.TP 
+\fBPROT_WRITE\fP
+そのメモリを変更できる。
+.TP 
+\fBPROT_EXEC\fP
+.\" FIXME
+.\" Document PROT_GROWSUP and PROT_GROWSDOWN
+そのメモリは実行可能である。
+.SH 返り値
+成功した場合、 \fBmprotect\fP()  は 0 を返す。エラーの場合は \-1 が返り、 \fIerrno\fP が適切に設定される。
+.SH エラー
+.TP 
+\fBEACCES\fP
+指定されたアクセスをメモリに設定することができない。 これは、例えば ファイルを読み取り専用で \fBmmap\fP(2)  しており、その領域に対して
+\fBmprotect\fP()  を呼び出して \fBPROT_WRITE\fP に設定しようとした場合に発生する。
+.TP 
+\fBEINVAL\fP
+.\" Or: both PROT_GROWSUP and PROT_GROWSDOWN were specified in 'prot'.
+\fIaddr\fP が有効なポインタでないか、 システムのページサイズの倍数でない。
+.TP 
+\fBENOMEM\fP
+カーネル内部の構造体を割り当てることができなかった。
+.TP 
+\fBENOMEM\fP
+[\fIaddr\fP, \fIaddr\fP+\fIlen\fP\-1] という範囲のアドレスがプロセスのアドレス空間として不正であるか、
+その範囲のアドレスがマップされていない 1 つ以上のページを指している (カーネル 2.4.19 より前では、この状況でエラー \fBEFAULT\fP
+が間違って生成されていた)。
+.SH 準拠
+.\" SVr4 defines an additional error
+.\" code EAGAIN. The SVr4 error conditions don't map neatly onto Linux's.
+SVr4, POSIX.1\-2001.  POSIX では、 \fBmmap\fP(2)  経由で獲得していないメモリ領域に対して \fBmprotect\fP()
+を行った場合の \fBmprotect\fP()  の動作は未定義であるとされている。
+.SH 注意
+Linux では、(カーネル vsyscall 領域以外の)  任意のプロセスアドレス空間に対して \fBmprotect\fP()
+を呼び出すことが、常に許されている。 これは特に既存のコードマッピングを書き込み可能にするために使われる。
+
+\fBPROT_EXEC\fP が \fBPROT_READ\fP と異なる影響を持つか否かは、アーキテクチャとカーネルのバージョンに依存する。 (i386
+などの) いくつかのアーキテクチャでは、 \fBPROT_WRITE\fP をセットすると、暗黙のうちに \fBPROT_READ\fP がセットされる。
+
+POSIX.1\-2001 では、 \fIprot\fP で指定されていないアクセスを許可する実装を認めている。 ただし、最低限、 \fBPROT_WRITE\fP
+がセットされている場合にのみ書き込みアクセスが許可され、 \fBPROT_NONE\fP がセットされている場合にはアクセスは許可されない点だけは
+満たす必要がある。
+.SH 例
+.\" sigaction.2 refers to this example
+.PP
+以下のプログラムは、メモリページを 4つ確保し、そのうち 3番目のページを 読み込み専用に設定する。その後で、確保した領域のアドレスの小さい方から
+大きな方に向かって順番にバイト値を変更するループを実行する。
+
+プログラムを実行した場合の一例を以下に示す。
+
+.in +4n
+.nf
+$\fB ./a.out\fP
+Start of region:        0x804c000
+Got SIGSEGV at address: 0x804e000
+.fi
+.in
+.SS プログラムのソース
+\&
+.nf
+#include <unistd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <malloc.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/mman.h>
+
+#define handle_error(msg) \e
+    do { perror(msg); exit(EXIT_FAILURE); } while (0)
+
+char *buffer;
+
+static void
+handler(int sig, siginfo_t *si, void *unused)
+{
+    printf("Got SIGSEGV at address: 0x%lx\en",
+            (long) si\->si_addr);
+    exit(EXIT_FAILURE);
+}
+
+int
+main(void)
+{
+    char *p;
+    int pagesize;
+    struct sigaction sa;
+
+    sa.sa_flags = SA_SIGINFO;
+    sigemptyset(&sa.sa_mask);
+    sa.sa_sigaction = handler;
+    if (sigaction(SIGSEGV, &sa, NULL) == \-1)
+        handle_error("sigaction");
+
+    pagesize = sysconf(_SC_PAGE_SIZE);
+    if (pagesize == \-1)
+        handle_error("sysconf");
+
+    /* Allocate a buffer aligned on a page boundary;
+       initial protection is PROT_READ | PROT_WRITE */
+
+    buffer = memalign(pagesize, 4 * pagesize);
+    if (buffer == NULL)
+        handle_error("memalign");
+
+    printf("Start of region:        0x%lx\en", (long) buffer);
+
+    if (mprotect(buffer + pagesize * 2, pagesize,
+                PROT_READ) == \-1)
+        handle_error("mprotect");
+
+    for (p = buffer ; ; )
+        *(p++) = \(aqa\(aq;
+
+    printf("Loop completed\en");     /* Should never happen */
+    exit(EXIT_SUCCESS);
+}
+.fi
+.SH 関連項目
+\fBmmap\fP(2), \fBsysconf\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/mremap.2 b/draft/man2/mremap.2
new file mode 100644 (file)
index 0000000..2545147
--- /dev/null
@@ -0,0 +1,124 @@
+.\" Copyright (c) 1996 Tom Bjorkholm <tomb@mydata.se>
+.\"
+.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
+.\" 1996-04-11 Tom Bjorkholm <tomb@mydata.se>
+.\"            First version written (1.3.86)
+.\" 1996-04-12 Tom Bjorkholm <tomb@mydata.se>
+.\"            Update for Linux 1.3.87 and later
+.\" 2005-10-11 mtk: Added NOTES for MREMAP_FIXED; revised EINVAL text.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MREMAP 2 2010\-06\-10 Linux "Linux Programmer's Manual"
+.SH 名前
+mremap \- 仮想メモリ・アドレスを再マッピングする
+.SH 書式
+.nf
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+.br
+\fB#include <sys/mman.h>\fP
+.sp
+\fBvoid *mremap(void *\fP\fIold_address\fP\fB, size_t \fP\fIold_size\fP\fB,\fP
+\fB             size_t \fP\fInew_size\fP\fB, int \fP\fIflags\fP\fB, ... /* void *\fP\fInew_address\fP\fB */);\fP
+.fi
+.SH 説明
+\fBmremap\fP()  は既存のメモリ・マッピングの拡張 (または縮小) を行う。 同時に移動されることもある (\fIflags\fP
+引き数と利用可能な仮想アドレス空間によって決まる)。
+
+\fIold_address\fP は拡張 (または縮小) しようとする仮想メモリ・ブロック の元のアドレスである。\fIold_address\fP
+はページ境界に合っていなければ ならない点に注意すること。\fIold_size\fP は元の仮想メモリ・ブロックの サイズである。 \fInew_size\fP
+は要求する変更後の仮想メモリ・ブロックのサイズである。 5 番目の引き数として \fInew_address\fP を指定することができる。下記の
+\fBMREMAP_FIXED\fP の説明を参照のこと。
+
+Linux ではメモリはページに分割される。ユーザー・プロセスは (一つまたは)  複数のリニアな仮想メモリセグメントを持つ。
+それぞれの仮想メモリセグメントは一つ以上の実メモリ・ページ にマッピングされている (マッピング情報はページ・テーブルで管理される)。
+仮想メモリセグメントにはセグメント毎の保護 (アクセス権) が設定されており、 メモリが不正にアクセスされた場合 (例えば読み込み専用のセグメントに
+書き込んだ場合)、セグメンテーション侵害 (segmentation violation) を
+引き起こす。また、セグメント外の仮想メモリにアクセスした場合にも セグメンテーション侵害が発生する。
+
+\fBmremap\fP()  は Linux のページ・テーブル方式を使用する。 \fBmremap\fP()
+は仮想アドレスとメモリ・ページのマッピングを変更する。これは非常に効率的な \fBrealloc\fP(3)  を実装するのに使用されている。
+
+\fIflags\fP ビットマスク引数は 0 または以下のフラグを含む:
+.TP 
+\fBMREMAP_MAYMOVE\fP
+デフォルトでは、現在の位置にマッピングを拡張するための 十分な空きがなければ \fBmremap\fP()  は失敗する。
+このフラグが指定されると、カーネルは必要があればマッピングを 新しい仮想アドレスに再配置することができる
+マッピングが再配置されると、古いマッピング位置への絶対ポインタは 無効になる (マッピングの開始アドレスからの相対オフセットは有効のままである)。
+.TP 
+\fBMREMAP_FIXED\fP (Linux 2.3.31 以降)
+このフラグは \fBmmap\fP(2)  の \fBMAP_FIXED\fP フラグと似たような目的で用いられる。 このフラグが指定されると、
+\fBmremap\fP()  は 5 番目の引き数 \fIvoid *new_address\fP
+を受け取り、この引数はマッピングが移動されるべきアドレスを指定する。 このアドレスはページ境界に合っていなければならない。 \fInew_address\fP
+と \fInew_size\fP で指定されるアドレス範囲に過去のマッピングがあった場合、 そのマッピングはアンマップされる (unmapped)。
+\fBMREMAP_FIXED\fP を指定した場合は、 \fBMREMAP_MAYMOVE\fP も指定しなければならない。
+.PP
+\fIold_address\fP と \fIold_size\fP で指定されるメモリセグメントが (\fBmlock\fP(2)  や同様のもので)
+ロックされている場合、セグメントのサイズが変わったり 再配置されたりした時にロックも維持される。
+その結果、プロセスによってロックされるメモリの量は変化する。
+.SH 返り値
+成功した場合は \fBmremap\fP()  は新しい仮想メモリ領域へのポインタを返す。 エラーの場合は \fBMAP_FAILED\fP (すなわち
+\fI(void\ *)\ \-1\fP) が返され、 \fIerrno\fP が適切に設定される。
+.SH エラー
+.TP 
+\fBEAGAIN\fP
+呼び出し元がロックされているメモリセグメントを拡張しようとしたが、 \fBRLIMIT_MEMLOCK\fP リソース制限を越えずにこれを行うことができない。
+.TP 
+\fBEFAULT\fP
+「セグメンテーション違反(segmentation fault)」 \fIold_address\fP から
+\fIold_address\fP+\fIold_size\fP の 範囲のアドレスのどれかがこのプロセスにおいて不正な仮想メモリ・アドレスである。
+たとえ要求したアドレス空間全体を含むようなマッピングがあったとしても、 それらのマッピングが異なった型ならば \fBEFAULT\fP を受け取るだろう。
+.TP 
+\fBEINVAL\fP
+不正な引き数が与えられた。 可能性のある原因は以下の通りである: たいていは \fIold_address\fP がページ境界に 合ってない;
+\fIflags\fP に \fBMREMAP_MAYMOVE\fP または \fBMREMAP_FIXED\fP 以外の値が指定されている; \fInew_size\fP
+がゼロ; \fInew_size\fP または \fInew_address\fP の値が不正; \fInew_address\fP と \fInew_size\fP
+で指定される新しいアドレス範囲が \fIold_address\fP と \fIold_size\fP で指定される古いアドレス範囲と重なっている;
+\fBMREMAP_FIXED\fP が指定されているが \fBMREMAP_MAYMOVE\fP が指定されていない。
+.TP 
+\fBENOMEM\fP
+現在の仮想アドレスではメモリ領域が拡張できず、 \fBMREMAP_MAYMOVE\fP フラグが \fIflags\fP に設定されていない。 または十分な
+(仮想) メモリが存在しない。
+.SH 準拠
+.\" 4.2BSD had a (never actually implemented)
+.\" .BR mremap (2)
+.\" call with completely different semantics.
+このコールは Linux 特有であり、移植を意図したプログラムで 使用すべきではない。
+.SH 注意
+バージョン 2.4 より前の glibc では、 \fBMREMAP_FIXED\fP の定義は公開されておらず、 \fBmremap\fP()  のプロトタイプは
+\fInew_address\fP 引き数を取らなかった。
+.SH 関連項目
+\fBbrk\fP(2), \fBgetpagesize\fP(2), \fBgetrlimit\fP(2), \fBmlock\fP(2), \fBmmap\fP(2),
+\fBsbrk\fP(2), \fBrealloc\fP(3), \fBmalloc\fP(3)
+
+ページ分割されたメモリについてもっと詳しく知りたいならば、あなたのお気に入りのオペレーティングシステムの教科書を参照してほしい (例えば、
+\fIModern Operating Systems\fP by Andrew S. Tanenbaum, \fIInside Linux\fP by
+Randolf Bentson, \fIThe Design of the UNIX Operating System\fP by Maurice
+J. Bach.)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/shmop.2 b/draft/man2/shmop.2
new file mode 100644 (file)
index 0000000..a5c0f16
--- /dev/null
@@ -0,0 +1,165 @@
+.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
+.\"
+.\" %%%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
+.\"
+.\" Modified Sun Nov 28 17:06:19 1993, Rik Faith (faith@cs.unc.edu)
+.\"          with material from Luigi P. Bai (lpb@softint.com)
+.\" Portions Copyright 1993 Luigi P. Bai
+.\" Modified Tue Oct 22 22:04:23 1996 by Eric S. Raymond <esr@thyrsus.com>
+.\" Modified, 5 Jan 2002, Michael Kerrisk <mtk.manpages@gmail.com>
+.\" Modified, 19 Sep 2002, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"    Added SHM_REMAP flag description
+.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"     Added notes on capability requirements
+.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"    Language and formatting clean-ups
+.\"    Changed wording and placement of sentence regarding attachment
+.\"            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"
+.SH 名前
+shmat, shmdt \- 共有メモリ (shared memory) の操作
+.SH 書式
+.nf
+\fB#include <sys/types.h>\fP
+\fB#include <sys/shm.h>\fP
+
+\fBvoid *shmat(int \fP\fIshmid\fP\fB, const void *\fP\fIshmaddr\fP\fB, int \fP\fIshmflg\fP\fB);\fP
+
+\fBint shmdt(const void *\fP\fIshmaddr\fP\fB);\fP
+.fi
+.SH 説明
+\fBshmat\fP()  は \fIshmid\fP で指定された共有メモリ・セグメント (shared memory segment) を
+コールしたプロセスのアドレス空間に付加 (attach) する。 付加するアドレスは \fIshmaddr\fP に以下のどれかの形式で指定する:
+.LP
+\fIshmaddr\fP が NULL ならば、システムはセグメントを付加するための 適切な (使用されていない) アドレスを選択する。
+.LP
+\fIshmaddr\fP が NULL でなく \fBSHM_RND\fP が \fIshmflg\fP に指定されている場合は、 \fIshmaddr\fP を
+\fBSHMLBA\fP の倍数へと切り捨てた (rounding down) のと等しいアドレスへ付加する。 その他の場合は \fIshmaddr\fP
+は付加を行なうアドレスで、ページ境界を指している必要がある。
+.PP
+\fBSHM_RDONLY\fP が \fIshmflg\fP に指定されていた場合は、 セグメントは読み込み専用に付加され、プロセスはそのセグメントへの
+読み込み許可を持たなければならない。 そうでなければそのセグメントは読み込みと書き込みのために付加され、
+プロセスはそのセグメントに読み込みと書き込みの許可を持つ必要がある。 書き込み専用の共有メモリ・セグメントという概念は存在しない。
+.PP
+(Linux 特有の)  \fBSHM_REMAP\fP フラグが \fIshmflg\fP に指定された場合は、
+セグメントのマッピングを既存のマッピングに置き換える。 マッピングの範囲は、 \fIshmaddr\fP から始まりセグメントのサイズ分だけある (通常
+\fBEINVAL\fP エラーは、このアドレス範囲にマッピングが既に存在するために起る)。 このフラグを指定する場合は、 \fIshmaddr\fP が NULL
+であってはならない。
+.PP
+呼び出したプロセスの \fBbrk\fP(2)  の値は付加によって変化しない。 そのセグメントはプロセスが終了 (exit) したら自動的に分離
+(detach) される。 同じセグメントをプロセスのアドレス空間に、読み込み専用および読み書き両用 として付加でき、また複数回付加することもできる。
+.PP
+成功した \fBshmat\fP()  コールは共有メモリ・セグメントに関連する \fIshmid_ds\fP 構造体 (\fBshmctl\fP(2)  を参照)
+のメンバーを以下のように更新する:
+.IP
+\fIshm_atime\fP には現在の時刻を設定する。
+.IP
+\fIshm_lpid\fP には呼び出したプロセスのプロセス ID が設定される。
+.IP
+\fIshm_nattch\fP を 1 増加させる。
+.PP
+\fBshmdt\fP()  は呼び出したプロセスのアドレス空間から \fIshmaddr\fP で指定されたアドレスに配置された共有メモリ・セグメントを分離
+(detach) する。 分離する共有メモリ・セグメントは、現在 \fIshmaddr\fP に付加されているものでなければならない。 \fIshmaddr\fP
+は、それを付加した時に \fBshmat\fP()  が返した値に等しくなければならない。
+.PP
+成功した \fBshmdt\fP()  コールはその共有メモリ・セグメントに関連する \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()  は、成功した場合、 付加された共有メモリ・セグメントのアドレスを返す。 エラーの場合、 \fI(void\ *)\ \-1\fP
+を返し、 \fIerrno\fP にエラーの原因を示す値を設定する。
+
+\fBshmdt\fP()  は、成功すると 0 を返す。 エラーの場合、\-1 を返し、 \fIerrno\fP にエラーの原因を示す値を設定する。
+.SH エラー
+\fBshmat\fP()  が失敗した場合、 \fIerrno\fP に以下の値のどれかを設定して返す:
+.TP 
+\fBEACCES\fP
+呼び出したプロセスに要求された種類の付加に必要な許可がなく、 \fBCAP_IPC_OWNER\fP ケーパビリティ (capability) がない。
+.TP 
+\fBEIDRM\fP
+\fIshmid\fP が削除 (remove) された識別子 (identifier) を指している。
+.TP 
+\fBEINVAL\fP
+\fIshmid\fP の値が不正である。 \fIshmaddr\fP の値が境界違反 (unaligned) (つまり、ページ境界に合っておらず、
+\fBSHM_RND\fP が指定されていない) または が不正である。 \fIshmaddr\fP へのセグメントの付加に失敗した。 または
+\fBSHM_REMAP\fP が指定されているが、 \fIshmaddr\fP が NULL であった。
+.TP 
+\fBENOMEM\fP
+ディスクリプター (descriptor) やページ・テーブルのためのメモリを 割り当てることができない。
+.PP
+\fBshmdt\fP()  が失敗した場合、 \fBEINVAL\fP は以下のようにセットされる:
+.TP 
+\fBEINVAL\fP
+.\" The following since 2.6.17-rc1:
+\fIshmaddr\fP に付加された共有メモリ・セグメントが存在しない。 もしくは、 \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 である)。
+.SH 注意
+共有メモリセグメントを付加する場合の移植性の高い方法としては、 \fIshmaddr\fP を NULL にして \fBshmat\fP()  を使用するのがよい。
+このような方法で付加される共有メモリセグメントは、 プロセスが異なれば別のアドレスに付加される、という点に注意すること。
+よって共有メモリ内で管理されるポインタは、 絶対アドレスではなく、 (一般的にはセグメントの開始アドレスからの)  相対アドレスで作成するべきである。
+.PP
+Linux では共有メモリセグメントに既に削除マークが付けられていても、 その共有メモリセグメントを付加することができる。 しかし
+POSIX.1\-2001 ではこのような動作を指定しておらず、 他の多くの実装もこれをサポートしていない。
+.LP
+以下のシステム・パラメーターは、 \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 である。
+.PP
+現在の実装では、プロセスごとの 共有メモリ・セグメントの最大数 (\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 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/splice.2 b/draft/man2/splice.2
new file mode 100644 (file)
index 0000000..598eb6a
--- /dev/null
@@ -0,0 +1,148 @@
+.\" This manpage is Copyright (C) 2006 Jens Axboe
+.\" 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
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH SPLICE 2 2012\-05\-04 Linux "Linux Programmer's Manual"
+.SH 名前
+splice \- パイプとの間でデータを継ぎ合わせる
+.SH 書式
+.nf
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+\fB#include <fcntl.h>\fP
+
+.\" Return type was long before glibc 2.7
+\fBssize_t splice(int \fP\fIfd_in\fP\fB, loff_t *\fP\fIoff_in\fP\fB, int \fP\fIfd_out\fP\fB,\fP
+\fB               loff_t *\fP\fIoff_out\fP\fB, size_t \fP\fIlen\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP
+.fi
+.SH 説明
+\fBsplice\fP()  は、カーネルアドレス空間とユーザアドレス空間との間のコピーを伴わずに、 2 つのファイルディスクリプタ間でデータの移動を行う。
+ファイルディスクリプタ \fIfd_in\fP からファイルディスクリプタ \fIfd_out\fP へ最大 \fIlen\fP バイトを転送する。 2
+つのファイルディスクリプタのうち一つは パイプを参照していなければならない。
+
+\fIfd_in\fP がパイプを参照している場合、 \fIoff_in\fP は NULL でなければならない。 \fIfd_in\fP がパイプを参照しておらず、
+\fIoff_in\fP が NULL の場合、 \fIfd_in\fP の現在のファイルオフセットから始まるバイトを読み出す。
+現在のファイルオフセットは適切に調整される。 \fIfd_in\fP がパイプを参照しておらず、 \fIoff_in\fP が NULL でない場合、
+\fIoff_in\fP は \fIfd_in\fP からのデータ読み出しを開始する先頭オフセットを格納したバッファ へのポインタでなければならない。この場合、
+\fIfd_in\fP の現在のファイルオフセットは変更されない。 \fIfd_out\fP と \fIoff_out\fP に関しても同様である。
+
+\fIflags\fP 引き数には、以下の値の 0 個以上をビット毎の論理和の形で指定する。
+.TP  1.9i
+\fBSPLICE_F_MOVE\fP
+ページのコピーでなく移動を試みる。 これはカーネルに対するヒントでしかない。 つまり、カーネルがパイプからページを移動できない場合や、
+パイプバッファがページ全部を参照していない場合は、 ページのコピーが行われることもある。 このフラグの最初の実装にはバグがあった。そのため、 Linux
+2.6.21 以降ではこのフラグの操作はできないようになっている (ただし、 \fBsplice\fP()
+コールでこのフラグを指定することは今も認められている)。 将来、正しい実装が行われることだろう。
+.TP 
+\fBSPLICE_F_NONBLOCK\fP
+入出力時に停止 (block) しない。 このフラグを指定すると、 splice によるパイプ操作を非停止モード (nonblocking) で
+行おうとするが、その場合でも \fBsplice\fP()  は停止することもある。なぜなら、データのやり取りを行う ファイルディスクリプタは
+(\fBO_NONBLOCK\fP フラグをセットされていない場合) 停止する可能性があるからである。
+.TP 
+\fBSPLICE_F_MORE\fP
+この後の splice でさらに転送されるデータがあることを示す。 このフラグは \fIfd_out\fP がソケットを参照している場合に有用なヒントとなる
+(\fBsend\fP(2)  の \fBMSG_MORE\fP や \fBtcp\fP(7)  の \fBTCP_CORK\fP の説明も参照)。
+.TP 
+\fBSPLICE_F_GIFT\fP
+\fBsplice\fP()  では使用しない。 \fBvmsplice\fP(2)  参照。
+.SH 返り値
+成功して完了すると、 \fBsplice\fP()  はパイプから出し入れしたバイト数を返す。 返り値 0 はデータの転送が行わなかったことを示す。
+この場合、処理を停止 (block) しても無意味である。 なぜなら、 \fIfd_in\fP
+が参照するパイプの書き込み側に接続されている者がいないからである。
+
+エラーの場合、 \fBsplice\fP()  は \-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
+.SH エラー
+.TP 
+\fBEBADF\fP
+ファイルディスクリプタの一方または両方が有効ではない、 もしくは適切な read\-write モードではない。
+.TP 
+\fBEINVAL\fP
+.\" The append-mode error is given since 2.6.27; in earlier kernels,
+.\" splice() in append mode was broken
+対象のファイルシステムが splice に対応していない、 または対象のファイルが追記モードでオープンされている、
+またはディスクリプタのどちらもパイプを参照していない、 または seek できないデバイスに対してオフセットが指定された。
+.TP 
+\fBENOMEM\fP
+メモリ不足。
+.TP 
+\fBESPIPE\fP
+\fIoff_in\fP か \fIoff_out\fP のいずれかが NULL ではないが、対応するファイルディスクリプタが パイプを参照している。
+.SH バージョン
+\fBsplice\fP() システムコールは Linux 2.6.17 で初めて登場した。
+ライブラリによるサポートは glibc バージョン 2.5 で追加された。
+.SH 準拠
+このシステムコールは Linux 固有である。
+.SH 注意
+3 つのシステムコール (\fBsplice\fP(), \fBvmsplice\fP(2), \fBtee\fP(2))
+を使うと、ユーザ空間プログラムは任意のカーネルバッファに対する 完全な制御ができる。カーネルバッファは、パイプに使用されているのと
+同種のバッファを使ってカーネル内に実装されている。 大まかにいうと、これらのシステムコールは以下の仕事を行う:
+.TP  1.2i
+\fBsplice\fP()
+バッファから任意のファイルディスクリプタや、その逆方向、 もしくはあるバッファから別のバッファへの、データ移動を行う。
+.TP 
+\fBtee\fP(2)
+あるバッファから別のバッファへのデータ「コピー」を行う。
+.TP 
+\fBvmsplice\fP(2)
+ユーザ空間からバッファへのデータ「コピー」を行う。
+.PP
+.\"
+.\" Linus: Now, imagine using the above in a media server, for example.
+.\" Let's say that a year or two has passed, so that the video drivers
+.\" have been updated to be able to do the splice thing, and what can
+.\" you do? You can:
+.\"
+.\" - splice from the (mpeg or whatever - let's just assume that the video
+.\"   input is either digital or does the encoding on its own - like they
+.\"   pretty much all do) video input into a pipe (remember: no copies - the
+.\"   video input will just DMA directly into memory, and splice will just
+.\"   set up the pages in the pipe buffer)
+.\" - tee that pipe to split it up
+.\" - splice one end to a file (ie "save the compressed stream to disk")
+.\" - splice the other end to a real-time video decoder window for your
+.\"   real-time viewing pleasure.
+.\"
+.\" Linus: Now, the advantage of splice()/tee() is that you can
+.\" do zero-copy movement of data, and unlike sendfile() you can
+.\" do it on _arbitrary_ data (and, as shown by "tee()", it's more
+.\" than just sending the data to somebody else: you can duplicate
+.\" the data and choose to forward it to two or more different
+.\" users - for things like logging etc.).
+.\"
+ここではコピーの話をしているが、実際のコピーは一般的に回避される。 カーネルは、パイプ・バッファをカーネルメモリのページへのポインタ集合として
+実装し、ページへの参照回数を管理することで、これを実現している。 カーネルは、対象となるページを参照する (出力バッファ用の) ポインタを
+新規に作成することでバッファ内のページの「コピー」を作成し、 そのページの参照回数を増やす。つまり、ポインタだけがコピーされ、
+バッファのページはコピーされない。
+.SH 例
+\fBtee\fP(2)  参照。
+.SH 関連項目
+\fBsendfile\fP(2), \fBtee\fP(2), \fBvmsplice\fP(2)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man2/vm86.2 b/draft/man2/vm86.2
new file mode 100644 (file)
index 0000000..0888203
--- /dev/null
@@ -0,0 +1,67 @@
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" Copyright 1997 Andries E. Brouwer (aeb@cwi.nl)
+.\"
+.\" %%%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
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH VM86 2 2009\-02\-20 Linux "Linux Programmer's Manual"
+.SH 名前
+vm86old, vm86 \- 仮想 8086 モードへ移行する
+.SH 書式
+\fB#include <sys/vm86.h>\fP
+.sp
+\fBint vm86old(struct vm86_struct *\fP\fIinfo\fP\fB);\fP
+.sp
+\fBint vm86(unsigned long \fP\fIfn\fP\fB, struct vm86plus_struct *\fP\fIv86\fP\fB);\fP
+.SH 説明
+\fBvm86\fP()  システムコールは Linux 0.97p2 で導入された。 これは Linux 2.1.15 と 2.0.28 で
+\fBvm86old\fP()  に名前が変更され、 新しい \fBvm86\fP()  が導入された。 \fIstruct vm86_struct\fP の定義は
+1.1.8 と 1.1.9 で変更された。
+.LP
+これらのコールによってプロセスは VM86 モード (Intel の文書では仮想 8086 モード) へと移行する。 これらのコールは
+\fBdosemu\fP で使用される。
+.PP
+VM86 モードはプロテクトモードタスクにおける リアルモードのエミュレーションである。
+.SH 返り値
+成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
+.SH エラー
+.TP 
+\fBEFAULT\fP
+この返り値は i386 固有のものであり、 ユーザー空間のデータを取得する際に問題があったことを示す。
+.TP 
+\fBENOSYS\fP
+この返り値は、このコールが現在のアーキテクチャで実装されていないことを示す。
+.TP 
+\fBEPERM\fP
+保存されたカーネルスタックが既に存在している。(これはカーネルが通常の 状態であるかをチェックしている。保存されたスタックは vm86 モードで
+しか存在しない。)
+.SH 準拠
+この関数は 32 ビット Intel プロセッサ上の Linux 特有の関数であり、 移植を意図したプログラムでは使用すべきでない。
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/__setfpucw.3 b/draft/man3/__setfpucw.3
new file mode 100644 (file)
index 0000000..c2126a5
--- /dev/null
@@ -0,0 +1,52 @@
+.\" Written Sat Mar  8 10:35:08 MEZ 1997 by
+.\" J. "MUFTI" Scheurich (mufti@csv.ica.uni-stuttgart.de)
+.\"
+.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
+.\" This page is licensed under the GNU General Public License
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH __SETFPUCW 3 2012\-12\-31 Linux "Linux Programmer's Manual"
+.SH 名前
+__setfpucw \- i386 アーキテクチャにおける FPU のコントロールワードの設定 (obsolete)
+.SH 書式
+\fB#include <i386/fpu_control.h>\fP
+.sp
+\fBvoid __setfpucw(unsigned short \fP\fIcontrol_word\fP\fB);\fP
+.SH 説明
+\fB__setfpucw\fP()  は、i386アーキテクチャにおいて \fIcontrol_word\fP を FPU (floating\-point
+unit) のレジスタに転送する。 これは浮動小数点演算の精度、丸め方、 および浮動小数点例外を制御するのに使われる。
+.SH 準拠
+この関数は非標準で GNU 拡張である。
+.SH 注意
+glibc 2.1 以降では、この関数は存在しない。 新たな関数群が C99 から導入された。これらのプロトタイプは
+\fI<fenv.h>\fP に置かれている。 FPU の丸めモードの制御には \fBfegetround\fP(3),
+\fBfesetround\fP(3) などが、浮動小数点関連の環境には \fBfegetenv\fP(3), \fBfeholdexcept\fP(3),
+\fBfesetenv\fP(3), \fBfeupdateenv\fP(3) などが、 FPU 例外処理には \fBfeclearexcept\fP(3),
+\fBfegetexceptflag\fP(3), \fBferaiseexcept\fP(3), \fBfesetexceptflag\fP(3),
+\fBfetestexcept\fP(3) などが導入された。
+.PP
+FPU のコントロールワードへどうしても直接アクセスする必要がある場合には、 \fI<fpu_control.h>\fP の
+\fB_FPU_GETCW\fP マクロと \fB_FPU_SETCW\fP マクロを用いることは可能である。
+.SH 例
+\fB__setfpucw(0x1372)\fP
+
+は、i386アーキテクチャにおける FPU のコントロールワードを、
+.br
+     \- 拡張精度
+.br
+     \- 最も近い整数へ丸める、中間の場合は偶数を選択する。
+.br
+     \- 桁溢れ、0で除算、及び無効値(NaN)ときに例外を発生に設定する。
+.SH 関連項目
+\fBfeclearexcept\fP(3)
+.br
+\fI<fpu_control.h>\fP
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/alloca.3 b/draft/man3/alloca.3
new file mode 100644 (file)
index 0000000..9782624
--- /dev/null
@@ -0,0 +1,104 @@
+.\" Copyright (c) 1980, 1991 Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"    This product includes software developed by the University of
+.\"    California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\" %%%LICENSE_END
+.\"
+.\"     @(#)alloca.3   5.1 (Berkeley) 5/2/91
+.\"
+.\" Converted Mon Nov 29 11:05:55 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Tue Oct 22 23:41:56 1996 by Eric S. Raymond <esr@thyrsus.com>
+.\" Modified 2002-07-17, aeb
+.\" 2008-01-24, mtk:
+.\"     Various rewrites and additions (notes on longjmp() and SIGSEGV).
+.\"     Weaken warning against use of alloca() (as per Debian bug 461100).
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH ALLOCA 3 2008\-01\-24 GNU "Linux Programmer's Manual"
+.SH 名前
+alloca \- 自動的に解放されるメモリを割り当てる
+.SH 書式
+\fB#include <alloca.h>\fP
+.sp
+\fBvoid *alloca(size_t \fP\fIsize\fP\fB);\fP
+.SH 説明
+\fBalloca\fP()  関数は、 \fIsize\fP バイトの領域を呼出元のスタック・フレームに割り付ける。 この一時的な領域は、 \fBalloca\fP()
+を呼び出した関数が呼出元に返るときに自動的に解放される。
+.SH 返り値
+\fBalloca\fP()  関数は、割り付けた領域の始まりを指すポインタを返す。 割り付けによってスタックオーバーフローが起った場合の
+プログラムの動作は定義されていない。
+.SH 準拠
+この関数は POSIX.1\-2001 にはない。
+
+32V, PWB, PWB.2, 3BSD, 4BSD に \fBalloca\fP()  関数が登場した証拠がある。 4.3BSD
+には、マニュアルページがある。 Linux は、GNU 版を使っている。 この関数は POSIX.1\-2001 にはない。
+.SH 注意
+\fBalloca\fP()  関数は、機種とコンパイラに依存する。 特定のアプリケーションでは、この関数を使うと \fBmalloc\fP(3)  と
+\fBfree\fP(3)  を組み合わせて使った場合に比べて効率を改善することができる。 特定の場合では、この関数を使うことで、 \fBlongjmp\fP(3)
+や \fBsiglongjmp\fP(3)  を使うアプリケーションでのメモリの開放を簡単にすることができる。
+それ以外の場合では、この関数の使用は推奨されない。
+
+\fBalloca\fP()  により割り当てられる空間はスタックフレームから割り当てらるので、 関数の戻り先が \fBlongjmp\fP(3)  や
+\fBsiglongjmp\fP(3)  の呼び出しによりジャンプした場合には、 割り当てられた空間は自動的に解放される。
+
+\fBalloca\fP()  で割り当てられた空間を \fBfree\fP(3)  しようとすることのないように!
+.SS "GNU 版についての注意"
+通常 \fBgcc\fP(1)  は \fBalloca\fP()  の呼び出しをインラインコードに変換する。 \fI\-ansi\fP, \fI\-std=c89\fP,
+\fI\-std=c99\fP, \fI\-fno\-builtin\fP のいずれかのオプションが指定された場合、この変換は行われない (また
+\fI<alloca.h>\fP のインクルードも行われない)。 だだし、デフォルトでは glibc 版の
+\fI<stdlib.h>\fP は \fI<alloca.h>\fP
+をインクルードしており、これには以下の行が含まれているので注意すること。
+.nf
+
+    #define alloca(size)   __builtin_alloca (size)
+
+.fi
+独自版の __builtin_alloca (size) 関数があると厄介な結果になる。
+.LP
+このコードはインライン化されているので、 この関数のアドレスを取得したり、 他のライブラリをリンクして動作を変更することはできない。
+.LP
+通常このインラインコードはスタックポインタを移動する 1 つの命令 (instruction) から構成されており、
+スタックオーバーフローをチェックしない。 よって NULL エラーが返されることはない。
+.SH バグ
+スタックフレームが拡張できなかった場合、エラー通知は行われない。 (しかしながら、割り当てに失敗した後で、プログラムが割り当てられなかった
+空間にアクセスしようとした場合に \fBSIGSEGV\fP シグナルを受信することだろう。)
+
+多くのシステムにおいて、関数コールの引き数のリスト内では \fBalloca\fP()  が使えない。 これは、 \fBalloca\fP()
+によって予約されるスタック領域が、 関数引き数に使われるスタック領域の中に現れてしまうためである。
+.SH 関連項目
+\fBbrk\fP(2), \fBlongjmp\fP(3), \fBmalloc\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/catgets.3 b/draft/man3/catgets.3
new file mode 100644 (file)
index 0000000..40797e3
--- /dev/null
@@ -0,0 +1,63 @@
+.\" Copyright 1993 Mitchum DSouza <m.dsouza@mrc-applied-psychology.cambridge.ac.uk>
+.\"
+.\" %%%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
+.\"
+.\" Updated, aeb, 980809
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH CATGETS 3 1998\-08\-09 "" "Linux Programmer's Manual"
+.SH 名前
+catgets \- メッセージカタログからメッセージを取り出す
+.SH 書式
+.nf
+\fB#include <nl_types.h>\fP
+
+\fBchar *catgets(nl_catd \fP\fIcatalog\fP\fB, int \fP\fIset_number\fP\fB, int \fP\fImessage_number\fP\fB,\fP
+\fB              const char *\fP\fImessage\fP\fB);\fP
+.fi
+.SH 説明
+\fBcatgets\fP()  は catalog で指定されたメッセージカタログから、 セット \fIset_number\fP のメッセージ
+\fImessage_number\fP を読み取る。 \fIcatalog\fP は、 \fBcatopen\fP(3)  の呼び出しによって得られたカタログ
+ディスクリプタを指定する。 4番目の引数 \fImessage\fP は、指定のメッセージカタログが現在利用できない 場合に \fBcatgets\fP()
+が返すデフォルトのメッセージを指す。 メッセージテキストは内部のバッファ領域に格納されており、
+保存や変更を行う場合にはアプリケーション側でコピーする必要がある。 返される文字列は常にヌル文字で終端される。
+.SH 返り値
+.LP
+成功した場合、 \fBcatgets\fP()  は内部のバッファ領域へのポインタを返す。 ここにはヌル文字で終端されたメッセージ文字列が格納されている。
+失敗した場合は \fImessage\fP を返す。
+.SH 準拠
+POSIX.1\-2001.
+.SH 注意
+これらの関数は libc.so.4.4.4c 以降でしか使えない。 Jan 1987 X/Open Portability Guide
+では、エラーの時に 返される値により微妙な指定をしている。 \fIcatalog\fP で指定されたメッセージカタログが利用できない場合は
+\fImessage\fP を返し、一方メッセージカタログはあるが指定したメッセージがない場合は 空の文字列が返される。 SUSv2
+ではこの二種類のエラーリターンは廃止され、 常に \fImessage\fP を返すことにしたようである。
+.SH 関連項目
+\fBcatopen\fP(3), \fBsetlocale\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/catopen.3 b/draft/man3/catopen.3
new file mode 100644 (file)
index 0000000..f8e80a6
--- /dev/null
@@ -0,0 +1,97 @@
+.\" Copyright 1993 Mitchum DSouza <m.dsouza@mrc-applied-psychology.cambridge.ac.uk>
+.\"
+.\" %%%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
+.\"
+.\" Modified Thu Dec 13 22:51:19 2001 by Martin Schulze <joey@infodrom.org>
+.\" Modified 2001-12-14 aeb
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH CATOPEN 3 2001\-12\-14 GNU "Linux Programmer's Manual"
+.SH 名前
+catopen, catclose \- メッセージカタログのオープン/クローズ
+.SH 書式
+\fB#include <nl_types.h>\fP
+.sp
+\fBnl_catd catopen(const char *\fP\fIname\fP\fB, int \fP\fIflag\fP\fB);\fP
+
+\fBint catclose(nl_catd \fP\fIcatalog\fP\fB);\fP
+.SH 説明
+関数 \fBcatopen\fP()  はメッセージカタログをオープンし、カタログディスクリプタを返す。 このディスクリプタは \fBcatclose\fP()
+または \fBexecve\fP(2)  が呼び出されるまで有効である。 カタログディスクリプタを実装するために ファイルディスクリプタを使用すると、
+\fBFD_CLOEXEC\fP フラグが設定される。
+.LP
+引き数 \fIname\fP はオープンするメッセージカタログの名前を指定する。 \fIname\fP が絶対パスで指定されている場合 (すなわち
+\(aq/\(aq を含んでいる場合)、 \fIname\fP はメッセージカタログへのパス名である。 それ以外の場合、環境変数 \fBNLSPATH\fP が
+\fIname\fP とともに使用され \fB%N\fP を置き換える (\fBlocale\fP(7)  参照)。 プロセスが root 権限を持っているときに
+\fBNLSPATH\fP が使われるかどうかは指定されていない。 \fBNLSPATH\fP 環境変数が存在しないか、 \fBNLSPATH\fP
+で指定されたパスの中の どのパスにおいてもメッセージカタログをオープンできない場合、 実装で定義されているパスが使われる。 後者のデフォルトパスは、
+\fIflag\fP 引き数が \fBNL_CAT_LOCALE\fP の場合には \fBLC_MESSAGES\fP のロケール設定に依存し、 \fIflag\fP 引き数が
+0 の場合には \fBLANG\fP 環境変数に依存する。 ロケールの \fBLC_MESSAGES\fP を変更すると、
+オープンされているカタログディスクリプタが無効になるかもしれない。
+.LP
+\fBcatopen\fP()  の \fIflag\fP 引き数は、使用される言語のソースを示すために使われる。 \fBNL_CAT_LOCALE\fP
+に設定されると、 \fBLC_MESSAGES\fP の現在のロケール設定が使われる。 それ以外の場合は \fBLANG\fP 環境変数が使われる。
+.LP
+関数 \fBcatclose\fP()  は \fIcatalog\fP で指定されたメッセージカタログをクローズする。 これは、以降の \fIcatalog\fP
+で指定されるメッセージカタログへの全ての参照を無効にする。
+.SH 返り値
+関数 \fBcatopen\fP()  が成功すると、 \fInl_catd\fP 型のメッセージカタログディスクリプタを返す。 失敗した場合は
+\fI(nl_catdv) \-1\fP を返し、 \fIerrno\fP を設定してエラーを示す。 ここで起こり得るエラーの値には、 \fBopen\fP(2)
+の呼び出しの際に起こり得る全てのエラーの値が含まれる。
+.LP
+関数 \fBcatclose\fP()  は、成功した場合 0 を、失敗した場合 \-1 を返す。
+.SH 環境変数
+.TP 
+\fBLC_MESSAGES\fP
+\fBLC_MESSAGES\fP ロケール設定のソースになることも可能なので、 \fIflag\fP が \fBNL_CAT_LOCALE\fP
+に設定されている場合は、使用する言語を決定するのに使われる。
+.TP 
+\fBLANG\fP
+\fIflag\fP が 0 の場合、使用する言語を決定する。
+.SH 準拠
+.\" In XPG 1987, Vol. 3 it says:
+.\" .I "The flag argument of catopen is reserved for future use"
+.\" .IR "and should be set to 0" .
+POSIX.1\-2001.  定数 \fBMCLoadBySet\fP と \fBMCLoadAll\fP に対応するソースが何であるのかがはっきりしていない
+(下記参照)。
+.SH 注意
+以上は POSIX.1\-2001 における説明である。 glibc では \fBNL_CAT_LOCALE\fP の値は 1 である (以下の
+\fBMCLoadAll\fP と比較のこと)。 デフォルトのパスは場合によって様々であるが、通常は \fI/usr/share/locale\fP
+以下のファイルが調べられる。
+.SS "Linux における注意"
+これらの関数は libc.so.4.4.4c 以降で使用可能である。 linux の libc4 と libc5 においては、カタログディスクリプタ
+\fInl_catd\fP は \fBmmap\fP(2)  されたメモリの領域であってファイルディスクリプタではない。 \fBcatopen\fP()  の
+\fIflag\fP は、 \fBMCLoadBySet\fP (=0) か \fBMCLoadAll\fP (=1) のどちらかである。
+前者の場合、カタログのセットは必要時にロードされる。 後者の場合、最初の \fBcatopen\fP()
+の呼び出しのときに全てのカタログがメモリ内にロードされる。 デフォルトのパスは場合によって様々であるが、通常は \fI/etc/locale\fP と
+\fI/usr/share/locale\fP 以下のファイルが調べられる。
+.SH 関連項目
+\fBcatgets\fP(3), \fBsetlocale\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/dl_iterate_phdr.3 b/draft/man3/dl_iterate_phdr.3
new file mode 100644 (file)
index 0000000..8b13cca
--- /dev/null
@@ -0,0 +1,151 @@
+.\" Copyright (c) 2003 by 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
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH DL_ITERATE_PHDR 3 2007\-05\-18 GNU "Linux Programmer's Manual"
+.SH 名前
+dl_iterate_phdr \- 共有オブジェクトのリストを辿る
+.SH 書式
+.nf
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+\fB#include <link.h>\fP
+
+\fBint dl_iterate_phdr(\fP
+          \fBint (*\fPcallback\fB) (struct dl_phdr_info *\fPinfo\fB,\fP
+                           \fBsize_t\fP size\fB, void *\fPdata\fB),\fP
+          \fBvoid *\fPdata\fB);\fP
+.fi
+.SH 説明
+\fBdl_iterate_phdr\fP()  関数を使うと、アプリケーションは実行時に どの共有オブジェクトをロードしたかを見つけることができる。
+
+\fBdl_iterate_phdr\fP()  関数はアプリケーションの共有オブジェクトのリストを辿り、 各オブジェクトに対して関数 \fIcallback\fP
+を 1 回ずつ呼び出す。 これは全ての共有オブジェクトが処理されるか、 \fIcallback\fP が 0 以外の値を返すまで行われる。
+
+各々の \fIcallback\fP 呼び出しは 3 つの引き数を受け取る: \fIinfo\fP は共有オブジェクトの情報を保持する構造体へのポインタである。
+\fIsize\fP は \fIinfo\fP で指される構造体のサイズである。 \fIdata\fP は呼び出し元プログラムから
+\fBdl_iterate_phdr\fP()  の呼び出しの (同じく \fIdata\fP という名前の) 第 2 引き数として渡される値のコピーである。
+
+\fIinfo\fP 引き数は、以下のような型の構造体である。
+
+.in +4n
+.nf
+struct dl_phdr_info {
+    ElfW(Addr)        dlpi_addr;  /* オブジェクトのベースアドレス */
+    const char       *dlpi_name;  /* (null 文字で終端された)
+                                     オブジェクト名 */
+    const ElfW(Phdr) *dlpi_phdr;  /* このオブジェクトの
+                                     ELF プログラムヘッダの
+                                     配列へのポインタ */
+    ElfW(Half)        dlpi_phnum; /* \fIdlpi_phdr\fP のアイテム数 */
+};
+.fi
+.in
+
+(\fIElfW\fP()  マクロ定義は引き数をハードウェアアーキテクチャに適した ELF データ型の名前に変換する。 たとえば、32
+ビットプラットフォームでは ElfW(Addr) はデータ型名 Elf32_Addr を生成する。 これらの型についての更に詳細な情報は、ヘッダファイル
+\fI<elf.h>\fP と \fI<link.h>\fP にある。
+
+\fIdlpi_addr\fP フィールドは共有オブジェクトのベースアドレス (つまり、共有オブジェクトの仮想メモリアドレスと、 ファイル
+(このファイルから共有オブジェクトがロードされる) における 共有オブジェクトのオフセットとの差分) を表す。 \fIdlpi_name\fP は null
+文字で終端された文字列であり、 このパス名のファイルから共有オブジェクトがロードされる。
+
+\fIdlpi_phdr\fP と \fIdlpi_phnum\fP フィールドの意味を理解するには、 ELF
+共有オブジェクトが幾つかのセグメントから構成されていることと、 各セグメントがそれに対応するプログラムヘッダ (そのセグメントを説明する)
+を持っていることを知っている必要がある。 \fIdlpi_phdr\fP フィールドは、この共有オブジェクトのプログラムヘッダの配列へのポインタである。
+\fIdlpi_phnum\fP は、この配列のサイズを表す。
+
+これらのプログラムヘッダは以下のような形式の構造体である:
+.in +4n
+.nf
+
+typedef struct
+{
+    Elf32_Word  p_type;    /* セグメントの型 */
+    Elf32_Off   p_offset;  /* セグメントのファイルオフセット */
+    Elf32_Addr  p_vaddr;   /* セグメントの仮想アドレス */
+    Elf32_Addr  p_paddr;   /* セグメントの物理アドレス */
+    Elf32_Word  p_filesz;  /* ファイルにおけるセグメントサイズ */
+    Elf32_Word  p_memsz;   /* メモリにおけるセグメントサイズ */
+    Elf32_Word  p_flags;   /* セグメントフラグ */
+    Elf32_Word  p_align;   /* セグメントの配置 (alignment) */
+} Elf32_Phdr;
+.fi
+.in
+
+特定のプログラムヘッダ \fIx\fP の仮想メモリにおける位置は、以下の式で計算できる点に注意すること:
+
+.nf
+  addr == info\->dlpi_addr + info\->dlpi_phdr[x].p_vaddr;
+.fi
+.SH 返り値
+\fBdl_iterate_phdr\fP()  関数は最後の \fIcallback\fP の呼び出しで返された値を返す。
+.SH バージョン
+\fBdl_iterate_phdr\fP()  は glibc のバージョン 2.2.4 以降でサポートされている。
+.SH 準拠
+\fBdl_iterate_phdr\fP()  関数は Linux 固有であり、移植を考えたアプリケーションでは避けるべきである。
+.SH 例
+以下のプログラムは、共有オブジェクトがロードされた パス名の一覧を表示する。 各共有オブジェクトについて、このプログラムは オブジェクトの ELF
+セグメントがロードされた 仮想アドレスの一覧を表示する。
+
+.nf
+#define _GNU_SOURCE
+#include <link.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+static int
+callback(struct dl_phdr_info *info, size_t size, void *data)
+{
+    int j;
+
+    printf("name=%s (%d segments)\en", info\->dlpi_name,
+        info\->dlpi_phnum);
+
+    for (j = 0; j < info\->dlpi_phnum; j++)
+         printf("\et\et header %2d: address=%10p\en", j,
+             (void *) (info\->dlpi_addr + info\->dlpi_phdr[j].p_vaddr));
+    return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+    dl_iterate_phdr(callback, NULL);
+
+    exit(EXIT_SUCCESS);
+}
+.fi
+.SH 関連項目
+\fBldd\fP(1), \fBobjdump\fP(1), \fBreadelf\fP(1), \fBdlopen\fP(3), \fBelf\fP(5),
+\fBld.so\fP(8)
+
+オンラインのいろいろな場所で入手できる \fIExecutable and Linking Format Specification\fP
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/dlopen.3 b/draft/man3/dlopen.3
new file mode 100644 (file)
index 0000000..689178e
--- /dev/null
@@ -0,0 +1,309 @@
+.\" Copyright 1995 Yggdrasil Computing, Incorporated.
+.\" written by Adam J. Richter (adam@yggdrasil.com),
+.\" with typesetting help from Daniel Quinlan (quinlan@yggdrasil.com).
+.\" and Copyright 2003 Michael Kerrisk (mtk.manpages@gmail.com).
+.\"
+.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
+.\" Modified by David A. Wheeler <dwheeler@dwheeler.com> 2000-11-28.
+.\" Applied patch by Terran Melconian, aeb, 2001-12-14.
+.\" Modified by Hacksaw <hacksaw@hacksaw.org> 2003-03-13.
+.\" Modified by Matt Domsch, 2003-04-09: _init and _fini obsolete
+.\" Modified by Michael Kerrisk <mtk.manpages@gmail.com> 2003-05-16.
+.\" Modified by Walter Harms: dladdr, dlvsym
+.\" Modified by Petr Baudis <pasky@suse.cz>, 2008-12-04: dladdr caveat
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH DLOPEN 3 2008\-12\-06 Linux "Linux Programmer's Manual"
+.SH 名前
+dlclose, dlerror, dlopen, dlsym \- 動的リンクを行うローダへの プログラミングインターフェース
+.SH 書式
+\fB#include <dlfcn.h>\fP
+.sp
+\fBvoid *dlopen(const char *\fP\fIfilename\fP\fB, int \fP\fIflag\fP\fB);\fP
+.sp
+\fBchar *dlerror(void);\fP
+.sp
+\fBvoid *dlsym(void *\fP\fIhandle\fP\fB, const char *\fP\fIsymbol\fP\fB);\fP
+.sp
+\fBint dlclose(void *\fP\fIhandle\fP\fB);\fP
+.sp
+\fI\-ldl\fP でリンクする。
+.SH 説明
+\fBdlopen\fP(), \fBdlsym\fP(), \fBdlclose\fP(), \fBdlerror\fP()  の 4つの関数は、動的リンク (dynamic
+linking) を行うローダへの インタフェースを実装したものである。
+.SS dlerror()
+関数 \fBdlerror\fP()  は、前回 \fBdlerror\fP()  が呼び出された後に、 \fBdlopen\fP(), \fBdlsym\fP(),
+\fBdlclose\fP()  のいずれかで最後に発生したエラーについての説明メッセージを返す。
+初期化後または前回呼び出された後で、エラーが発生していなければ NULL を返す。
+.SS dlopen()
+関数 \fBdlopen\fP()  は、NULL 終端された文字列 \fIfilename\fP で指定されたファイル名の動的ライブラリ (dynamic
+library) をロードし、 その動的ライブラリへの内部「ハンドル」を返す。 \fIfilename\fP が NULL
+の場合、メイン・プログラムへのハンドルが返される。 \fIfilename\fP がスラッシュ ("/")
+を含む場合、(相対か絶対かの)パス名として解釈される。 それ以外の場合、動的リンカは以下の手順でライブラリを検索する (詳細は \fBld.so\fP(8)
+を参照):
+.IP o 4
+(ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RPATH タグが含まれており、 DT_RUNPATH
+タグが含まれていない場合、DT_RPATH タグに書かれている ディレクトリ・リストを検索する。
+.IP o
+プログラムの開始時に環境変数 \fBLD_LIBRARY_PATH\fP にコロン区切りのディレクトリのリストが定義されていれば、
+この環境変数に定義されたディレクトリが検索される (セキュリティ上の理由で、この変数は set\-UID や set\-GID された
+プログラムの場合は無視される)。
+.IP o
+(ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RUNPATH タグが含まれて
+いる場合、そのタグに書かれているディレクトリ・リストを検索する。
+.IP o
+キャッシュファイル \fI/etc/ld.so.cache\fP の中に \fIfilename\fP のエントリが入っているかをチェックする
+(\fB/etc/ld.so.cache\fP は \fBldconfig\fP(8)  によって管理されている)。
+.IP o
+ディレクトリ \fI/lib\fP と \fI/usr/lib\fP をこの順番で検索する。
+.PP
+そのライブラリが他の共有ライブラリに依存している場合は、 依存しているライブラリも動的リンカが同じ検索ルールに基づいて 自動的にロードする
+(それらのライブラリにさらに依存関係がある場合などは この処理は再帰的に行われる)。
+.PP
+\fIflag\fP には以下の 2 つの値のいずれかを含めなければならない:
+.TP 
+\fBRTLD_LAZY\fP
+lazy binding (手抜きなシンボルの結び付け) が行う。 シンボルの解決はそのシンボルを参照するコードが実行されるときにのみ
+行われる。シンボルが一度も参照されなかった場合には、そのシンボルは 解決されないままとなる。 (lazy binding
+は関数参照についてのみ実施される; 変数への参照は常に ライブラリがロードされた時点で直ちに解決される。)
+.TP 
+\fBRTLD_NOW\fP
+この値が指定されるか、環境変数 \fBLD_BIND_NOW\fP に空でない文字列が設定された場合、 ライブラリ中の未定義のシンボルを全て解決してから
+\fBdlopen\fP()  は復帰する。解決できなかったときにはエラーが返される。
+.PP
+以下の値のうち 0 個以上を論理和 (OR) の形で \fIflag\fP に追加することもできる:
+.TP 
+\fBRTLD_GLOBAL\fP
+このライブラリで定義されているシンボルが、これより後でロードされる ライブラリのシンボル解決で利用できるようになる。
+.TP 
+\fBRTLD_LOCAL\fP
+このフラグは \fBRTLD_GLOBAL\fP の反対の意味であり、どちらのフラグも指定されなかった場合は こちらがデフォルトとなる。
+このライブラリで定義されているシンボルは、これより後でロードされる ライブラリでのシンボル参照で利用できない。
+.TP 
+\fBRTLD_NODELETE\fP (glibc 2.2 以降)
+.\" (But it is present on Solaris.)
+\fBdlclose\fP()  中にそのライブラリをアンロードしない。 そのため、同じライブラリをこれ以降に \fBdlopen\fP()
+で再度ロードした場合に、ライブラリ内の静的変数は再初期化されない。 このフラグは POSIX.1\-2001 では規定されていない。
+.TP 
+\fBRTLD_NOLOAD\fP (glibc 2.2 以降)
+.\" (But it is present on Solaris.)
+.\"
+そのライブラリをロードしない。 このフラグはそのライブラリがすでに組み込まれているかを検査するのに 利用できる (\fBdlopen\fP()
+は、ライブラリが組み込まれていなければ NULL を返し、 すでに組み込まれていればそのライブラリのハンドルを返す)。
+また、すでにロードされているライブラリのフラグを昇格させるのにも 利用できる。例えば、過去に \fBRTLD_LOCAL\fP でロードしたライブラリを
+\fBRTLD_NOLOAD\ |\ RTLD_GLOBAL\fP で再オープンすることができる。 このフラグは POSIX.1\-2001
+では規定されていない。
+.TP 
+\fBRTLD_DEEPBIND\fP (glibc 2.3.4 以降)
+.\" Inimitably described by UD in
+.\" http://sources.redhat.com/ml/libc-hacker/2004-09/msg00083.html.
+このライブラリ内のシンボルの参照領域をグローバル領域よりも前に配置する。 つまり、内蔵型のライブラリでは、すでにロードされたライブラリに含まれる
+同じ名前のグローバルなシンボルよりも自ライブラリ内のシンボルが優先して 使われる。 このフラグは POSIX.1\-2001 では規定されていない。
+.PP
+\fIfilename\fP が NULL ポインタである場合は、 返されるハンドルはメイン・プログラムのものになる。 このハンドルが \fBdlsym\fP()
+に渡されると、シンボルの検索は、メイン・プログラム内、 プログラムの起動時にロードされる全ての共有ライブラリ、 \fBdlopen\fP()  によって
+\fBRTLD_GLOBAL\fP フラグ付きでロードされた全ての共有ライブラリ、の順序で行われる。
+.PP
+オープンされたライブラリ中での外部参照は、 そのライブラリの依存リストにあるライブラリか、 \fBRTLD_GLOBAL\fP
+フラグ付きで既にオープンされているライブラリを使って解決される。 実行ファイルが "\-rdynamic" フラグ ("\-\-export\-dynamic"
+も同義)  付きでリンクされている場合は、実行ファイル中のグローバルシンボルも、 動的にロードされるライブラリ内の参照解決に用いられる。
+.PP
+同じライブラリが \fBdlopen\fP()  によって再度ロードされた場合には、同じファイルハンドルが返される。 dl
+ライブラリはライブラリハンドルのリンク数を管理している。 したがって動的ライブラリは \fBdlclose\fP()  が \fBdlopen\fP()
+と同じ回数だけ呼び出されない限りアンロードされない。 \fB_init\fP()  ルーチンは一度だけ呼び出される (\fB_init\fP()
+が存在する場合のみ)。 \fBRTLD_NOW\fP が指定されて \fBdlopen\fP()  が呼び出された場合、 \fBRTLD_LAZY\fP
+で以前にロードされたライブラリのシンボル解決が実行されることがある。
+.PP
+\fBdlopen\fP()  は、何らかの理由で失敗すると NULL を返す。
+.SS dlsym()
+関数 \fBdlsym\fP()  は、 \fBdlopen\fP()  が返した動的ライブラリの「ハンドル」と、 NULL
+終端されたシンボル名の文字列を引き数に取り、 そのシンボルがロードされたメモリのアドレスを返す。
+シンボルが、指定されたライブラリと、指定されたライブラリがロードされる際に \fBdlopen\fP()
+が自動的にロードしてライブラリのいずれにも見つからない場合には、 \fBdlsym\fP()  は NULL を返す (\fBdlsym\fP()
+による検索は、これらのライブラリの依存関係のツリーを先頭から 辿って行われる)。 実際にはシンボルの値自体が NULL になることもある (そのため、
+\fBdlsym\fP()  の返り値が NULL であったとしても必ずしもエラーという訳ではない)。 エラーかどうかを確認する正しい方法は以下の通りである:
+\fBdlerror\fP()  を呼び出して以前のエラー状態をクリアしてから、 \fBdlsym\fP()  を呼び出す。その後でもう一度
+\fBdlerror\fP()  を呼び出して、 \fBdlerror\fP()  の返り値を変数に保存し、保存した値が NULL であるか判定する。
+.PP
+\fBRTLD_DEFAULT\fP と \fBRTLD_NEXT\fP という二つの特別な擬似ハンドルがある。 \fBRTLD_DEFAULT\fP
+は、デフォルトのライブラリ検索順序にしたがって、 検索対象のシンボルが最初に現れるところを探す。 \fBRTLD_NEXT\fP
+は、ライブラリ検索順序の中で現在のライブラリ以降で最初に 関数が現れるところを探す。この機能を使うことで、別の共有ライブラリの
+関数へのラッパーを提供することができる。
+.SS dlclose()
+関数 \fBdlclose\fP()  は動的ライブラリのハンドル \fIhandle\fP の参照カウントを 1 減らす。参照カウントが 0
+になり、ロードされている 他のライブラリからそのライブラリ内のシンボルが使われていなければ、 その動的ライブラリをアンロードする。
+.LP
+関数 \fBdlclose\fP()  は、成功した場合は 0 を返し、エラーの場合 0 以外を返す。
+.SS "廃止されたシンボル _init() と _fini()"
+リンカは \fB_init\fP と \fB_fini\fP を特別なシンボルと解釈する。 ある動的ライブラリで \fB_init\fP()
+という名前のルーチンがエクスポートされていれば、 そのコードは、ライブラリのロード後、かつ \fBdlopen\fP()  が復帰する前に実行される。
+その動的ライブラリで \fB_fini\fP()  という名前のルーチンがエクスポートされていれば、
+ライブラリがアンロードされる直前にそのルーチンが呼び出される。 システムの起動ファイルに対するリンクを避ける必要がある場合、 \fBgcc\fP(1)
+のコマンドラインに \fI\-nostartfiles\fP オプションを指定すればよい。
+.LP
+.\" void _init(void) __attribute__((constructor));
+.\" void _fini(void) __attribute__((destructor));
+このルーチンや、gcc のオプション \fB\-nostartfiles\fP や \fB\-nostdlib\fP は使用しないことを推奨する。
+これらを使うと、望ましくない動作をすることがある。 なぜなら、(特別な措置が行われない限り) これらの constructor/destructor
+ルーチンは実行されないからである。
+.LP
+代わりに、ライブラリは \fB__attribute__((constructor))\fP や \fB__attribute__((destructor))\fP
+の関数属性を使って必要なルーチンをエクスポートするのがよい。 これらについては gcc の info ページを参照のこと。 constructor
+ルーチンは \fBdlopen\fP()  が復帰する前に実行され、 destructor ルーチンは \fBdlclose\fP()  が復帰する前に実行される。
+.SS "GNU での拡張: dladdr() と dlvsym()"
+glibc では POSIX には記載されていない関数が 2つ追加されている。 プロトタイプは以下の通りである。
+.sp
+.nf
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+\fB#include <dlfcn.h>\fP
+.sp
+\fBint dladdr(void *\fP\fIaddr\fP\fB, Dl_info *\fP\fIinfo\fP\fB);\fP
+.sp
+\fBvoid *dlvsym(void *\fP\fIhandle\fP\fB, char *\fP\fIsymbol\fP\fB, char *\fP\fIversion\fP\fB);\fP
+.fi
+.PP
+関数 \fBdladdr\fP()  は、関数のポインタを引き数にとり、関数の名前と関数が定義されている ファイルの解決を試みる。情報は \fIDl_info\fP
+構造体に格納される。
+.sp
+.in +4n
+.nf
+typedef struct {
+    const char *dli_fname;  /* Pathname of shared object that
+                               contains address */
+    void       *dli_fbase;  /* Address at which shared object
+                               is loaded */
+    const char *dli_sname;  /* Name of nearest symbol with address
+                               lower than \fIaddr\fP */
+    void       *dli_saddr;  /* Exact address of symbol named
+                               in \fIdli_sname\fP */
+} Dl_info;
+.fi
+.in
+.PP
+\fIaddr\fP にマッチするシンボルが見つからなかった場合、 \fIdli_sname\fP と \fIdli_saddr\fP は NULL にセットされる。
+.PP
+\fBdladdr\fP()  は、エラー時には 0 を返し、成功した場合は 0 以外を返す。
+.PP
+関数 \fBdlvsym\fP()  は \fBdlsym\fP()  と同じ動作をするが、バージョンの文字列を渡す引き数が 追加されている点が異なる
+(\fBdlvsym\fP()  はバージョン 2.1 以降の glibc で提供されている)。
+.SH 準拠
+POSIX.1\-2003 には \fBdlclose\fP(), \fBdlerror\fP(), \fBdlopen\fP(), \fBdlsym\fP().
+の記載がある。
+.SH 注意
+.\" .LP
+.\" The string returned by
+.\" .BR dlerror ()
+.\" should not be modified.
+.\" Some systems give the prototype as
+.\" .sp
+.\" .in +5
+.\" .B "const char *dlerror(void);"
+.\" .in
+シンボル \fBRTLD_DEFAULT\fP と \fBRTLD_NEXT\fP は \fI<dlfcn.h>\fP で定義されており、
+\fI<dlfcn.h>\fP のインクルード前に \fB_GNU_SOURCE\fP が定義されている場合のみ有効となる。
+
+glibc 2.2.3 以降では、 \fBatexit\fP(3)  を使って、ライブラリがアンロードされる際に自動的に呼び出される 終了ハンドラ (exit
+handler) を登録することができる。
+.SS 歴史
+dlopen インターフェースの標準は SunOS をもとにしている。 SunOS には \fBdladdr\fP()  もあったが、 \fBdlvsym\fP()
+はなかった。
+.SH バグ
+時として、 \fBdladdr\fP()  に渡した関数ポインタは驚くような値になることがある。 いくつかのアーキテクチャ (特に i386 と
+x86_64) では、 引き数として使用した関数が動的リンクライブラリで定義されるもので あったとしても、 \fIdli_fname\fP と
+\fIdli_fbase\fP が \fBdladdr\fP()  を呼び出したオブジェクトを参照した状態で終わっていることがある。
+.PP
+問題は、関数ポインタの解決は今なおコンパイル時に行われるが、 そのポインタは元のオブジェクトの \fIplt\fP (Procedure Linkage
+Table) セクションを指しているだけだという点にある (オブジェクト自体は、ダイナミックリンカによってシンボルの解決が行われた後に、
+関数の呼び出しを行う)。 これに対処する方法としては、 コードを position\-independent でコンパイルするという方法がある。
+そうすると、コンパイラはコンパイル時にポインタを用意することができず、 今日の \fBgcc\fP(1)  では、実行時に \fBdladdr\fP()
+に関数ポインタを渡す前に、 \fIgot\fP (Global Offset Table) から最終的なシンボルのアドレスをロードするだけの
+コードが生成される。
+.SH 例
+math ライブラリをロードし、2.0 の余弦を表示する
+.nf
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+
+int
+main(int argc, char **argv)
+{
+    void *handle;
+    double (*cosine)(double);
+    char *error;
+
+    handle = dlopen("libm.so", RTLD_LAZY);
+    if (!handle) {
+        fprintf(stderr, "%s\en", dlerror());
+        exit(EXIT_FAILURE);
+    }
+
+    dlerror();    /* Clear any existing error */
+
+    /* Writing: cosine = (double (*)(double)) dlsym(handle, "cos");
+       would seem more natural, but the C99 standard leaves
+       casting from "void *" to a function pointer undefined.
+       The assignment used below is the POSIX.1\-2003 (Technical
+       Corrigendum 1) workaround; see the Rationale for the
+       POSIX specification of dlsym(). */
+
+.\" But in fact "gcc -O2 -Wall" will complain about the preceding cast.
+    *(void **) (&cosine) = dlsym(handle, "cos");
+
+    if ((error = dlerror()) != NULL)  {
+        fprintf(stderr, "%s\en", error);
+        exit(EXIT_FAILURE);
+    }
+
+    printf("%f\en", (*cosine)(2.0));
+    dlclose(handle);
+    exit(EXIT_SUCCESS);
+}
+.fi
+.PP
+このプログラムを "foo.c" に書いたとすると、以下のコマンドでプログラムを ビルドできる。
+.in +4n
+.LP
+    gcc \-rdynamic \-o foo foo.c \-ldl
+.in
+.PP
+\fB_init\fP()  と \fB_fini\fP()  をエクスポートするライブラリの場合は 以下のようにしてコンパイルする必要がある。 例として
+\fIbar.c\fP をコンパイルする場合:
+.in +4n
+.LP
+    gcc \-shared \-nostartfiles \-o bar bar.c
+.in
+.SH 関連項目
+\fBld\fP(1), \fBldd\fP(1), \fBdl_iterate_phdr\fP(3), \fBrtld\-audit\fP(7), \fBld.so\fP(8),
+\fBldconfig\fP(8)
+
+ld.so info pages, gcc info pages, ld info pages
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/fenv.3 b/draft/man3/fenv.3
new file mode 100644 (file)
index 0000000..1fd6a3a
--- /dev/null
@@ -0,0 +1,198 @@
+.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
+.\"
+.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
+.\" 2000-08-14 added GNU additions from Andreas Jaeger
+.\" 2000-12-05 some changes inspired by acahalan's remarks
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FENV 3 2010\-10\-31 Linux "Linux Programmer's Manual"
+.SH 名前
+feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag,
+fetestexcept, fegetenv, fegetround, feholdexcept, fesetround, fesetenv,
+feupdateenv, feenableexcept, fedisableexcept, fegetexcept \- 浮動小数点の丸めと例外の取り扱い
+.SH 書式
+.nf
+\fB#include <fenv.h>\fP
+.sp
+\fBint feclearexcept(int \fP\fIexcepts\fP\fB);\fP
+.br
+\fBint fegetexceptflag(fexcept_t *\fP\fIflagp\fP\fB, int \fP\fIexcepts\fP\fB);\fP
+.br
+\fBint feraiseexcept(int \fP\fIexcepts\fP\fB);\fP
+.br
+\fBint fesetexceptflag(const fexcept_t *\fP\fIflagp\fP\fB, int \fP\fIexcepts\fP\fB);\fP
+.br
+\fBint fetestexcept(int \fP\fIexcepts\fP\fB);\fP
+.sp
+\fBint fegetround(void);\fP
+.br
+\fBint fesetround(int \fP\fIrounding_mode\fP\fB);\fP
+.sp
+\fBint fegetenv(fenv_t *\fP\fIenvp\fP\fB);\fP
+.br
+\fBint feholdexcept(fenv_t *\fP\fIenvp\fP\fB);\fP
+.br
+\fBint fesetenv(const fenv_t *\fP\fIenvp\fP\fB);\fP
+.br
+\fBint feupdateenv(const fenv_t *\fP\fIenvp\fP\fB);\fP
+.fi
+.sp
+\fI\-lm\fP でリンクする。
+.SH 説明
+これらの 11 個の関数は C99 で定義されており、 浮動小数点の丸めと例外 (オーバーフロー、ゼロによる除算など)  の取り扱いを規定する。
+.SS 例外
+\fIdivide\-by\-zero\fP 例外は、有限の数値に対する演算が、 無限大の答えを生成するような場合に起こる。
+.LP
+\fIoverflow\fP 例外は、結果が浮動小数点数値で表記されなければならないのに、 その絶対値が表現可能な浮動小数点数の (有限の) 最大値よりも
+(ずっと) 大きくなってしまうような場合に起こる。
+.LP
+\fIunderflow\fP 例外は、結果が浮動小数点数値で表記されなければならないのに、 その絶対値が正の正規化浮動小数点数の最小値よりも
+小さくなってしまう (そして 非正規化数で表現した場合に非常に精度を失ってしまう)  ような場合に起こる。
+.LP
+\fIinexact\fP 例外は、丸め後の演算結果が、 無限精度の結果と異なるような場合に起こる。 \fIoverflow\fP 例外か \fIunderflow\fP
+例外が起きたときには、常にこの例外も起こる。
+.LP
+\fIinvalid\fP 例外は、演算結果がうまく定義できない結果を生じるような場合に起こる。 例えば 0/0、無限大 \- 無限大、sqrt(\-1) など。
+.SS 例外処理
+例外の表し方には 2 つの方法がある。 ひとつは、単一のビットで (例外があったかなかったかを) 表す方法で、
+これらのビットは整数のあるビット位置に対応し、ビットの対応付けは 実装依存である。もう一つは、内部構造体を使って表す方法で、
+この方法の方が例外に関するより多くの情報 (例えば例外が起こったコードのアドレスなど) が含まれる。
+.LP
+\fBFE_DIVBYZERO\fP, \fBFE_INEXACT\fP, \fBFE_INVALID\fP, \fBFE_OVERFLOW\fP,
+\fBFE_UNDERFLOW\fP の各マクロは、それぞれ対応する例外の処理を 実装がサポートしている場合に定義される。
+このとき対応するビットをそれぞれ定義することになるので、 例外処理関数の呼び出しを、例えば \fBFE_OVERFLOW\fP|\fBFE_UNDERFLOW\fP
+という整数の引き数を用いて行うことができる。 他の例外もサポートされているかもしれない。 \fBFE_ALL_EXCEPT\fP
+マクロは、サポートされている例外に対応するビットが全てセットされている (サポートされている例外全ての論理和である)。
+.PP
+\fBfeclearexcept\fP()  関数は、引き数 \fIexcepts\fP のビット列で指定された例外をクリアする
+(処理は実装でサポートされている例外についてのみ行われる)。
+.LP
+\fBfegetexceptflag\fP()  関数は、引き数 \fIexcepts\fP で指定された例外フラグの状態を \fI*flagp\fP
+が指す内部オブジェクトに保存する。
+.LP
+\fBferaiseexcept\fP()  関数は、 \fIexcepts\fP のビット列で指定された例外のうち、 実装がサポートしているものを発生させる。
+.LP
+\fBfesetexceptflag\fP()  関数は、 \fIexcepts\fP で指定された例外に対応するフラグの状態を \fI*flagp\fP
+の値に設定する。 \fI*flagp\fP の値は、この関数を呼ぶ前に \fBfegetexceptflag\fP()
+関数を呼び出して取得しておかなければならない (このとき、 \fBfegetexceptflag\fP()  の最後の引き数には、
+\fBfesetexceptflag\fP()  に渡す \fIexcepts\fP のすべてのビットを含む値を指定すること)。
+.LP
+\fBfetestexcept\fP()  関数は、 \fIexcepts\fP 引き数でセットされているビットのうち、 現在設定されている例外に対応するビットが
+1 になったワードを返す。
+.SS 丸めモード
+丸めモードは、結果が仮数部だけで正確に表現できない際に、 浮動小数点操作の結果をどのように扱うかを決めるものである。
+さまざまな丸めモードを提供することができる: 最も近い値に丸める (デフォルト)、 (正の無限大に向かって) 大きくなる方向に丸める、
+(負の無限大に向かって) 小さくなる方向に丸める、 0 に向けて丸める、である。
+
+\fBFE_TONEAREST\fP, \fBFE_UPWARD\fP, \fBFE_DOWNWARD\fP, \fBFE_TOWARDZERO\fP
+の各マクロは、それぞれ対応する丸めの方向を 実装がサポートしている場合に定義される。
+.LP
+\fBfegetround\fP()  関数は現在の丸めモードに対応するマクロを返す。
+.LP
+\fBfesetround\fP()  関数は丸めモードを引き数に与えられた値にし、 成功したらゼロを返す。
+
+C99 と POSIX.1\-2008 では \fBFLT_ROUNDS\fP という識別子が規定されており、 \fI<float.h>\fP
+で定義されている。この識別子は 浮動小数点数の加算についての実装定義された丸め動作を表し、 以下のいずれかの値を持つ。
+.IP \-1
+丸めモードは決められていない。
+.IP 0
+0 に向けて丸める。
+.IP 1
+最も近い数に丸める。
+.IP 2
+正の無限大に向けて丸める。
+.IP 3
+負の無限大に向けて丸める。
+.PP
+他の値はマシン依存であり、標準的ではない丸めモードである。
+.PP
+\fBFLT_ROUNDS\fP の値には、 \fBfesetround\fP()  で設定された現在の丸めモードが反映されるべきである
+(但し、「バグ」の節を参照)。
+.SS 浮動小数点関連の環境
+浮動小数点関連の環境の全体は、 制御モードや状態フラグも含め、 \fIfenv_t\fP 型の内部オブジェクト一つで取り扱うことができる。
+デフォルトの環境は、 (\fIconst fenv_t *\fP 型の)  \fBFE_DFL_ENV\fP で示されるものである。
+これはプログラムの開始時に構築される環境であり、 ISO C では、丸めモードを最も近い値への丸め (\fBFE_TONEAREST\fP)
+に設定し、すべての例外をクリアし、不停止 (nonstop)  (例外が起きても継続する) モードとするように規定されている。
+.LP
+\fBfegetenv\fP()  関数は、現在の浮動小数点環境を、オブジェクト \fI*envp\fP に保存する。
+.LP
+\fBfeholdexcept\fP()  関数も同じ動作を行い、 さらに可能であれば、全ての例外フラグをクリアし、 nonstop (例外時にも実行を継続)
+モードに設定する。
+.LP
+\fBfesetenv\fP()  関数は、浮動小数点環境を、オブジェクト \fI*envp\fP から取り出した値に戻す。
+このオブジェクトは、有効であることが事前に分かっていなければならない。 例えば、 \fBfegetenv\fP()  や \fBfeholdexcept\fP()
+を呼び出した結果であるとか、 \fBFE_DFL_ENV\fP に等しいとかでなければならない。 この関数の呼び出しは例外を発生しない。
+.LP
+\fBfeupdateenv\fP()  関数は、オブジェクト \fI*envp\fP が表現する浮動小数点環境をインストールする。
+ただし、現在発生している例外はクリアされない。 この関数を呼んだ後に立っている例外は、 関数を呼ぶ前の値と \fI*envp\fP の値とのビットごとの OR
+を取ったものになる。 上記と同様に、オブジェクト \fI*envp\fP は、事前に有効であることが分かっていなければならない。
+.SH 返り値
+.\" Earlier seven of these functions were listed as returning void.
+.\" This was corrected in Corrigendum 1 (ISO/IEC 9899:1999/Cor.1:2001(E))
+.\" of the C99 Standard.
+これらの関数は、成功の場合 0 を返し、エラーが発生すると 0 以外を返す。
+.SH バージョン
+これらの関数は glibc バージョン 2.1 で初めて登場した。
+.SH 準拠
+IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1\-2001.
+.SH 注意
+.SS "glibc での注意"
+可能な場合には、GNU C Library はマクロ \fBFE_NOMASK_ENV\fP
+を定義する。このマクロはすべての例外でトラップが生じるような環境を表す。 \fB#ifdef\fP を使ってこのマクロをテストできる。これは
+\fB_GNU_SOURCE\fP が定義されている場合に限って定義される。 C99 標準は浮動小数点マスク (例えば特定のフラグでのトラップなど)
+の各ビットの設定方法については定義していない。 バージョン 2.2 以降の glibc は、 \fBfeenableexcept\fP()  関数と
+\fBfedisableexcept\fP()  関数をサポートしており、 各々の浮動小数点トラップを設定できるようになっている。 また
+\fBfegetexcept\fP()  によって状態の問い合わせもできるようになっている。
+.sp
+.nf
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+.br
+\fB#include <fenv.h>\fP
+.sp
+\fBint feenableexcept(int \fP\fIexcepts\fP\fB);\fP
+.br
+\fBint fedisableexcept(int \fP\fIexcepts\fP\fB);\fP
+.br
+\fBint fegetexcept(void);\fP
+.br
+.fi
+.LP
+\fBfeenableexcept\fP()  関数と \fBfedisableexcept\fP()  関数は \fIexcepts\fP
+によって表現される各例外のトラップを有効 (無効) にする。 成功した場合は直前に有効になっていた例外のセットを返す。 失敗した場合は \-1 を返す。
+\fBfegetexcept\fP()  関数は現在有効になっている例外全てからなるセットを返す。
+.SH バグ
+.\" Aug 08, glibc 2.8
+.\" See http://gcc.gnu.org/ml/gcc/2002-02/msg01535.html
+C99 の規定では、 \fBFLT_ROUNDS\fP の値には \fBfesetround\fP()
+で設定された現在の丸めモードが反映されるべきであるとされている。 現在のところ、 このようになっておらず、 \fBFLT_ROUNDS\fP は常に値 1
+となる。
+.SH 関連項目
+\fBmath_error\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/mq_receive.3 b/draft/man3/mq_receive.3
new file mode 100644 (file)
index 0000000..04fb7a6
--- /dev/null
@@ -0,0 +1,120 @@
+.\" t
+.\" 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
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MQ_RECEIVE 3 2010\-09\-20 Linux "Linux Programmer's Manual"
+.SH 名前
+mq_receive, mq_timedreceive \- メッセージキューからメッセージを受信する
+.SH 書式
+.nf
+\fB#include <mqueue.h>\fP
+.sp
+\fBssize_t mq_receive(mqd_t \fP\fImqdes\fP\fB, char *\fP\fImsg_ptr\fP\fB,\fP
+\fB                   size_t \fP\fImsg_len\fP\fB, unsigned *\fP\fImsg_prio\fP\fB);\fP
+.sp
+\fB#include <time.h>\fP
+\fB#include <mqueue.h>\fP
+.sp
+\fBssize_t mq_timedreceive(mqd_t \fP\fImqdes\fP\fB, char *\fP\fImsg_ptr\fP\fB,\fP
+\fB                   size_t \fP\fImsg_len\fP\fB, unsigned *\fP\fImsg_prio\fP\fB,\fP
+\fB                   const struct timespec *\fP\fIabs_timeout\fP\fB);\fP
+.fi
+.sp
+\fI\-lrt\fP でリンクする。
+.sp
+.ad l
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
+.in
+.sp
+\fBmq_timedreceive\fP():
+.RS 4
+_XOPEN_SOURCE\ >=\ 600 || _POSIX_C_SOURCE\ >=\ 200112L
+.RE
+.ad
+.SH 説明
+\fBmq_receive\fP()  は、記述子 \fImqdes\fP で参照されるメッセージキューから最も高い優先度を持つ
+最も古いメッセージを削除し、そのメッセージを \fImsg_ptr\fP が指すバッファに格納する。 \fImsg_len\fP 引き数は、 \fImsg_ptr\fP
+が指すバッファの大きさを示す。この値はキューの \fImq_msgsize\fP 属性よりも大きくなければならない (\fBmq_getattr\fP(3)
+参照)。 \fImsg_prio\fP が NULL 以外の場合、 \fImsg_prio\fP が指すバッファに受信したメッセージの優先度が格納される。
+
+キューが空の場合、デフォルトでは、 \fBmq_receive\fP()  は、新しいメッセージが届くか、関数呼び出しがシグナルハンドラにより
+中断されるまで、停止 (block) する。 メッセージキュー記述 (message queue description) で
+\fBO_NONBLOCK\fP フラグが有効になっている場合は、 \fBmq_receive\fP()  はエラー \fBEAGAIN\fP ですぐに失敗する。
+
+\fBmq_timedreceive\fP()  は \fBmq_receive\fP()  と全く同じ動作をするが、
+メッセージキューが空で、メッセージキュー記述で \fBO_NONBLOCK\fP フラグが有効になっていない場合に、この呼び出しが停止する時間の上限を
+\fIabs_timeout\fP が指す構造体で指定する点が異なる。この上限は、タイムアウトの時刻を、 時刻紀元 (Epoch; 1970\-01\-01
+00:00:00 +0000 (UTC)) からの経過時間 (秒とナノ秒の組) で指定する。タイムアウト時刻は以下の構造体で指定する:
+.sp
+.in +4n
+.nf
+struct timespec {
+    time_t tv_sec;        /* 秒 */
+    long   tv_nsec;       /* ナノ秒 */
+};
+
+.fi
+.in
+メッセージがキューになく、関数呼び出し時にすでにタイムアウト時刻が 過ぎている場合、 \fBmq_timedreceive\fP()  はすぐに返る。
+.SH 返り値
+成功すると、 \fBmq_receive\fP()  と \fBmq_timedreceive\fP()  は受信したメッセージのバイト数を返す。
+エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
+.SH エラー
+.TP 
+\fBEAGAIN\fP
+キューが空で、かつ \fImqdes\fP で参照されるメッセージキュー記述で \fBO_NONBLOCK\fP フラグがセットされていた。
+.TP 
+\fBEBADF\fP
+\fImqdes\fP で指定された記述子が不正である。
+.TP 
+\fBEINTR\fP
+関数呼び出しがシグナルハンドラにより中断された。 \fBsignal\fP(7)  参照。
+.TP 
+\fBEINVAL\fP
+関数呼び出しは停止するはずであったが、 \fIabs_timeout\fP が不正であった。 \fIabs_timeout\fP が不正とは、 \fItv_sec\fP
+が 0 未満、もしくは \fItv_nsec\fP が 0 未満か 1,000,000,000 より大きい、ということである。
+.TP 
+\fBEMSGSIZE\fP
+\fImsg_len\fP がメッセージキューの \fImq_msgsize\fP 属性よりも小さかった。
+.TP 
+\fBETIMEDOUT\fP
+メッセージが転送される前に関数呼び出しがタイムアウトした。
+.SH 準拠
+POSIX.1\-2001.
+.SH 注意
+Linux では、 \fBmq_timedreceive\fP()  はシステムコールである。 \fBmq_receive\fP()  はライブラリ関数で、
+\fBmq_timedreceive\fP()  システムコールを用いて実装されている。
+.SH 関連項目
+\fBmq_close\fP(3), \fBmq_getattr\fP(3), \fBmq_notify\fP(3), \fBmq_open\fP(3),
+\fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBmq_overview\fP(7), \fBtime\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/netlink.3 b/draft/man3/netlink.3
new file mode 100644 (file)
index 0000000..6d775f3
--- /dev/null
@@ -0,0 +1,83 @@
+.\" This manpage copyright 1998 by Andi Kleen.
+.\"
+.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
+.\" Subject to the GPL.
+.\" %%%LICENSE_END
+.\"
+.\" Based on the original comments from Alexey Kuznetsov
+.\" $Id: netlink.3,v 1.1 1999/05/14 17:17:24 freitag Exp $
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH NETLINK 3 2012\-08\-05 GNU "Linux Programmer's Manual"
+.SH 名前
+netlink \- netlink マクロ
+.SH 書式
+.nf
+.\" FIXME . what will glibc 2.1 use here?
+.\" May 2007: glibc 2.5, things look to be unchanged -- the header file
+.\" is still linux/netlink.h -- mtk
+\fB#include <asm/types.h>\fP
+.br
+\fB#include <linux/netlink.h>\fP
+.sp
+\fBint NLMSG_ALIGN(size_t \fP\fIlen\fP\fB);\fP
+.br
+\fBint NLMSG_LENGTH(size_t \fP\fIlen\fP\fB);\fP
+.br
+\fBint NLMSG_SPACE(size_t \fP\fIlen\fP\fB);\fP
+.br
+\fBvoid *NLMSG_DATA(struct nlmsghdr *\fP\fInlh\fP\fB);\fP
+.br
+\fBstruct nlmsghdr *NLMSG_NEXT(struct nlmsghdr *\fP\fInlh\fP\fB, int \fP\fIlen\fP\fB);\fP
+.br
+\fBint NLMSG_OK(struct nlmsghdr *\fP\fInlh\fP\fB, int \fP\fIlen\fP\fB);\fP
+.br
+\fBint NLMSG_PAYLOAD(struct nlmsghdr *\fP\fInlh\fP\fB, int \fP\fIlen\fP\fB);\fP
+.fi
+.SH 説明
+\fI<linux/netlink.h>\fP では、 netlink データグラムにアクセスしたり、これを作成するための
+標準マクロがいくつか定義されている。 これらは \fBcmsg\fP(3)  で定義されている補助データ (auxiliary data) 用のマクロと、
+その精神において似ているものである。 netlink ソケットに対してやりとりされるバッファには、 必ずこれらのマクロを使ってアクセスすべきである。
+.TP 
+\fBNLMSG_ALIGN\fP
+netlink メッセージの長さを丸めて正しく揃える。
+.TP 
+\fBNLMSG_LENGTH\fP
+格納領域 (payload) の長さ \fIlen\fP を引数にとり、 \fInlmsghdr\fP の \fInlmsg_len\fP フィールドに代入できる
+揃えられた長さ (aligned length) を返す。
+.TP 
+\fBNLMSG_SPACE\fP
+ペイロードの長さが \fIlen\fP の netlink メッセージのバイト数を返す。
+.TP 
+\fBNLMSG_DATA\fP
+与えた \fInlmsghdr\fP に関連づけられた格納領域へのポインタを返す。
+.TP 
+.\" this is bizarre, maybe the interface should be fixed.
+\fBNLMSG_NEXT\fP
+マルチパートメッセージにおいて、次の \fInlmsghdr\fP を入手する。これを呼び出すときには、 現在の nlmsghdr で NLMSG_DONE
+がセットされていないことを 確認しなければならない。この関数は終端で NULL を返さないからである。 \fIlen\fP
+引数はメッセージバッファの残り長さが入った左辺値である。 このマクロはこの引数からメッセージヘッダの長さ分を差し引く。
+.TP 
+\fBNLMSG_OK\fP
+Netlink メッセージが途切れておらず、かつ解釈可能な形の場合であれば真を返す。
+.TP 
+\fBNLMSG_PAYLOAD\fP
+\fInlmsghdr\fP に関連づけられた格納領域の長さを返す。
+.SH 準拠
+これらのマクロは非標準で、Linux での拡張である。
+.SH 注意
+通常はカーネルの低レベルインターフェイスよりも、 \fIlibnetlink\fP 経由で netlink を用いるほうが良い。
+.SH 関連項目
+\fBnetlink\fP(7)
+
+libnetlink に関しては
+.UR ftp://ftp.inr.ac.ru\:/ip\-routing\:/iproute2*
+.UE
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/posix_fallocate.3 b/draft/man3/posix_fallocate.3
new file mode 100644 (file)
index 0000000..7dae45e
--- /dev/null
@@ -0,0 +1,92 @@
+.\" 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
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH POSIX_FALLOCATE 3 2013\-02\-12 GNU "Linux Programmer's Manual"
+.SH 名前
+posix_fallocate \- ファイルのスペースを確保する
+.SH 書式
+.nf
+\fB#include <fcntl.h>\fP
+.sp
+\fBint posix_fallocate(int \fP\fIfd\fP\fB, off_t \fP\fIoffset\fP\fB, off_t \fP\fIlen\fP\fB);\fP
+.fi
+.sp
+.ad l
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
+.in
+.sp
+\fBposix_fallocate\fP():
+.RS 4
+_XOPEN_SOURCE\ >=\ 600 || _POSIX_C_SOURCE\ >=\ 200112L
+.RE
+.ad
+.SH 説明
+関数 \fBposix_fallocate\fP()  は、ディスクリプタ \fIfd\fP で参照されるファイルに対して、ディスクスペースを確実に確保する。
+ディスクスペースは \fIoffset\fP から始まる \fIlen\fP バイトの範囲のバイトである。 \fBposix_fallocate\fP()
+の呼び出しが成功した後、指定された範囲のバイトに対する書き込みは、 ディスクスペースの不足で失敗しないことが保証される。
+
+ファイルのサイズが \fIoffset\fP+\fIlen\fP より小さい場合、ファイルはこのサイズになるように拡大される。
+それ以外の場合、ファイルサイズは変わらない。
+.SH 返り値
+\fBposix_fallocate\fP()  は成功した場合、0 を返す。 失敗した場合、エラー番号を返す。 \fIerrno\fP
+が設定されない点に注意すること。
+.SH エラー
+.TP 
+\fBEBADF\fP
+\fIfd\fP が有効なファイルディスクリプタでないか、 書き込み用としてオープンされていない。
+.TP 
+\fBEFBIG\fP
+\fIoffset+len\fP が最大ファイルサイズを超えている。
+.TP 
+\fBEINVAL\fP
+\fIoffset\fP が 0 未満だったか、 \fIlen\fP が 0 以下だった。
+.TP 
+\fBENODEV\fP
+\fIfd\fP が通常のファイルとして参照されていない。
+.TP 
+\fBENOSPC\fP
+\fIfd\fP が参照するファイルを含むデバイスに十分な空き領域がない。
+.TP 
+\fBESPIPE\fP
+\fIfd\fP がパイプを参照している。
+.SH バージョン
+\fBposix_fallocate\fP()  は glibc 2.1.94 以降で利用可能である。
+.SH 準拠
+POSIX.1\-2001.
+
+POSIX.1\-2008 では、 \fIlen\fP が 0 の場合、もしくは \fIoffset\fP が 0 未満の場合、 \fBEINVAL\fP
+エラーを返すものとされている。 POSIX.1\-2001 では、 \fIlen\fP が 0 未満の場合、もしくは \fIoffset\fP が 0 未満の場合、
+\fBEINVAL\fP エラーを返すものとされている。また、 \fIlen\fP が 0 の場合、 \fBEINVAL\fP エラーを返してもよいとされている。
+.SH 関連項目
+\fBfallocate\fP(1), \fBfallocate\fP(2), \fBlseek\fP(2), \fBposix_fadvise\fP(2)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/posix_memalign.3 b/draft/man3/posix_memalign.3
new file mode 100644 (file)
index 0000000..1f35826
--- /dev/null
@@ -0,0 +1,182 @@
+.\" Copyright (c) 2001 by John Levon <moz@compsoc.man.ac.uk>
+.\" Based in part on GNU libc documentation.
+.\"
+.\" %%%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
+.\"
+.\" 2001-10-11, 2003-08-22, aeb, added some details
+.\" 2012-03-23, Michael Kerrisk <mtk.manpages@mail.com>
+.\"     Document pvalloc() and aligned_alloc()
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH POSIX_MEMALIGN 3 2012\-03\-23 GNU "Linux Programmer's Manual"
+.SH 名前
+posix_memalign, aligned_alloc, memalign, valloc, pvalloc \- アラインメント
+されたメモリの割り当てを行う
+.SH 書式
+.nf
+\fB#include <stdlib.h>\fP
+.sp
+\fBint posix_memalign(void **\fP\fImemptr\fP\fB, size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB);\fP
+\fBvoid *aligned_alloc(size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB);\fP
+\fBvoid *valloc(size_t \fP\fIsize\fP\fB);\fP
+.sp
+\fB#include <malloc.h>\fP
+.sp
+\fBvoid *memalign(size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB);\fP
+\fBvoid *pvalloc(size_t \fP\fIsize\fP\fB);\fP
+.fi
+.sp
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
+.in
+.sp
+.ad l
+\fBposix_memalign\fP(): _POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600
+.sp
+\fBaligned_alloc\fP(): _ISOC11_SOURCE
+.sp
+\fBvalloc\fP():
+.br
+.PD 0
+.RS 4
+.TP  4
+glibc 2.12 以降:
+.nf
+_BSD_SOURCE ||
+    (_XOPEN_SOURCE\ >=\ 500 ||
+        _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED) &&
+    !(_POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600)
+.br
+.fi
+.TP 
+glibc 2.12 より前:
+_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
+.ad b
+.br
+((非標準の) ヘッダファイル \fI<malloc.h>\fP も
+\fBvalloc\fP() の宣言も公開する。機能検査マクロは不要である。
+.RE
+.PD
+.SH 説明
+.\" glibc does this:
+関数 \fBposix_memalign\fP()  は、 \fIsize\fP バイトのメモリを割り当て、割り当てられたメモリのアドレスを \fI*memptr\fP
+に設定する。 割り当てられたメモリのアドレスは \fIalignment\fP の倍数になっているはずである。 \fIalignment\fP は 2
+のべき乗で、かつ \fIsizeof(void *)\fP の倍数でなければならない。 \fIsize\fP が 0 の場合、
+\fBposix_memalign\fP()  は NULL か一意なポインタ値を返す。 このポインタ値は、後で \fBfree\fP(3)
+に問題なく渡すことができる。
+
+.\" The behavior of memalign() for size==0 is as for posix_memalign()
+.\" but no standards govern this.
+廃止された関数である \fBmemalign\fP() は、 \fIsize\fP バイトのメモリを割り当て、
+割り当てられたメモリへのポインタを返す。 メモリのアドレスは \fIalignment\fP
+の倍数になっているはずである。 \fIalignment\fP は 2 のべき乗でなければならない。
+
+関数 \fBaligned_alloc\fP() は \fBmemalign\fP() と同じだが、\fIsize\fP が \fIalignment\fP
+の倍数でなければならないという追加の制限がある点が異なる。
+
+廃止された関数である \fBvalloc\fP()  は \fIsize\fP バイトのメモリを割り当て、割り当てられたメモリへのポインタを返す。
+メモリのアドレスはページサイズの倍数になっているはずである。 これは \fImemalign(sysconf(_SC_PAGESIZE),size)\fP
+と等価である。
+
+廃止された関数 \fBpvalloc\fP() は \fBvalloc\fP() と同様だが、
+割り当てられるサイズがシステムのページサイズの倍数に切り上げられる。
+
+これらの関数はいずれもメモリのゼロクリアを行わない。
+.SH 返り値
+\fBaligned_alloc\fP(), \fBmemalign\fP(), \fBvalloc\fP(), \fBpvalloc\fP() は割り当てられた
+メモリへのポインタを返す。 割り当てに失敗した場合は NULL を返す。
+
+\fBposix_memalign\fP()  は成功した場合は 0 を返し、 失敗した場合は次のセクションに記載されたエラー値のいずれかを返す。
+\fIerrno\fP はセットされないことに注意すること。
+.SH エラー
+.TP 
+\fBEINVAL\fP
+\fIalignment\fP 引き数が 2 のべき乗でなかったか、 \fIsizeof(void *)\fP の倍数でなかった。
+.TP 
+\fBENOMEM\fP
+割り当て要求を満たすのに十分なメモリがなかった。
+.SH バージョン
+関数 \fBmemalign\fP(), \fBvalloc\fP(), \fBpvalloc\fP() は
+すべての Linux libc ライブラリで使用可能である。
+
+関数 \fBaligned_alloc\fP() は glibc バージョン 2.16 で追加された。
+
+関数 \fBposix_fallocate\fP() は glibc 2.1.91 以降で利用可能である。
+.SH 準拠
+関数 \fBvalloc\fP() は 3.0BSD で登場した。4.3BSD では廃止されたと記載されており、
+SUSv2 では過去の名残だと記載されている。 POSIX.1\-2001 には存在しない。
+
+関数 \fBpvalloc\fP() は GNU による拡張である。
+
+関数 \fBmemalign\fP() は SunOS 4.1.3 で登場したが、4.4BSD にはない。
+
+関数 \fBposix_memalign\fP() は POSIX.1d に由来する。
+
+.\"
+関数 \fIaligned_alloc\fP() は C11 標準で規定されている。
+.SS ヘッダ
+\fBposix_memalign\fP()  の宣言を \fI<stdlib.h>\fP で行うことに関しては、 皆の意見が一致している。
+
+いくつかのシステムでは、 \fBmemalign\fP()  は \fI<malloc.h>\fP ではなく
+\fI<stdlib.h>\fP で宣言されている。
+
+SUSv2 によると、 \fBvalloc\fP() は \fI<stdlib.h>\fP で宣言される。 libc4,5
+や glibc では \fI<malloc.h>\fP で宣言されており、 さらに適切な機能検査
+マクロが定義された場合には \fI<stdlib.h>\fP でも宣言される(上記を参照)。
+.SH 注意
+多くのシステムでは、アラインメントに関して制限がある。例えば、 ブロックデバイスに対するダイレクト I/O に使用するバッファには
+アラインメントに関する制限がある。 POSIX では、どんなアラインメントが必要かを知るために
+\fIpathconf(path,_PC_REC_XFER_ALIGN)\fP コールを規定している。ここで \fBposix_memalign\fP()
+を使うと、この必要条件を満たすことができる。
+
+\fBposix_memalign\fP() は \fIalignment\fP が上で詳細に述べた必要条件を満たすか
+どうかを確かめる。 \fBmemalign\fP() は \fIalignment\fP 引き数が正しいかどうかの
+確認を行わないかもしれない。
+
+.\" Other systems allow passing the result of
+.\" .IR valloc ()
+.\" to
+.\" .IR free (3),
+.\" but not to
+.\" .IR realloc (3).
+POSIX では \fBposix_memalign\fP() によって獲得したメモリは \fBfree\fP(3) を
+使って解放することができる必要がある。 いくつかのシステムでは
+\fBmemalign\fP() や\fBvalloc\fP() で割り当てられたメモリを再利用する手段が
+提供されていない(なぜなら \fBfree\fP(3) に渡すことができるのは
+\fBmalloc\fP(3) から受け取ったポインタだけだが、例えば \fBmemalign\fP() は
+\fBmalloc\fP(3) を呼び出し、得た値をアラインメントしてしまうからである)。
+glibc の実装では、 ここに述べた関数のいずれで獲得したメモリも
+\fBfree\fP(3) で再利用することができる。
+
+glibc の \fBmalloc\fP(3) は常に 8 バイトにアラインメントされたメモリアドレスを
+返すので、ここで述べた関数が必要になるのは 8 バイトよりも大きなアラインメント
+が必要な場合だけである。
+.SH 関連項目
+\fBbrk\fP(2), \fBgetpagesize\fP(2), \fBfree\fP(3), \fBmalloc\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/queue.3 b/draft/man3/queue.3
new file mode 100644 (file)
index 0000000..9912810
--- /dev/null
@@ -0,0 +1,351 @@
+.\" Copyright (c) 1993
+.\"     The Regents of the University of California.  All rights reserved.
+.\"
+.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"     This product includes software developed by the University of
+.\"     California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\" %%%LICENSE_END
+.\"
+.\"     @(#)queue.3     8.2 (Berkeley) 1/24/94
+.\"
+.\" hch, 2002-03-25
+.\" 2007-12-08, mtk, Converted from mdoc to man macros
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH QUEUE 3 2007\-12\-28 Linux "Linux Programmer's Manual"
+.SH 名前
+LIST_ENTRY, LIST_HEAD, LIST_INIT, LIST_INSERT_AFTER, LIST_INSERT_HEAD,
+LIST_REMOVE, TAILQ_ENTRY, TAILQ_HEAD, TAILQ_INIT, TAILQ_INSERT_AFTER,
+TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, TAILQ_REMOVE, CIRCLEQ_ENTRY,
+CIRCLEQ_HEAD, CIRCLEQ_INIT, CIRCLEQ_INSERT_AFTER, CIRCLEQ_INSERT_BEFORE,
+CIRCLEQ_INSERT_HEAD, CIRCLEQ_INSERT_TAIL, CIRCLEQ_REMOVE \- リスト・テール (tail)
+キュー・循環キューの実装
+.SH 書式
+.nf
+\fB#include <sys/queue.h>\fP
+
+\fBLIST_ENTRY(\fP\fITYPE\fP\fB);\fP
+\fBLIST_HEAD(\fP\fIHEADNAME\fP\fB, \fP\fITYPE\fP\fB);\fP
+\fBLIST_INIT(LIST_HEAD *\fP\fIhead\fP\fB);\fP
+\fBLIST_INSERT_AFTER(LIST_ENTRY *\fP\fIlistelm\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP
+\fBLIST_INSERT_HEAD(LIST_HEAD *\fP\fIhead\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP
+\fBLIST_REMOVE(TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP
+
+\fBTAILQ_ENTRY(\fP\fITYPE\fP\fB);\fP
+\fBTAILQ_HEAD(\fP\fIHEADNAME\fP\fB, \fP\fITYPE\fP\fB);\fP
+\fBTAILQ_INIT(TAILQ_HEAD *\fP\fIhead\fP\fB);\fP
+\fBTAILQ_INSERT_AFTER(TAILQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIlistelm\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBTAILQ_INSERT_HEAD(TAILQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBTAILQ_INSERT_TAIL(TAILQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBTAILQ_REMOVE(TAILQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+
+\fBCIRCLEQ_ENTRY(\fP\fITYPE\fP\fB);\fP
+\fBCIRCLEQ_HEAD(\fP\fIHEADNAME\fP\fB, \fP\fITYPE\fP\fB);\fP
+\fBCIRCLEQ_INIT(CIRCLEQ_HEAD *\fP\fIhead\fP\fB);\fP
+\fBCIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIlistelm\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIlistelm\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_REMOVE(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB                TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+.fi
+.SH 説明
+これらのマクロは、次の 3 つのデータ構造を定義して操作する: リスト・テールキュー・循環キュー。 3
+つのデータ構造すべてにおいて以下の機能がサポートされている:
+.sp
+.RS 4
+.PD 0
+.IP * 4
+新たなエントリをリストの先頭に挿入する。
+.IP *
+新たなエントリをリストのどの要素よりも後に挿入する。
+.IP *
+リストの任意のエントリを削除する。
+.IP *
+リストを順方向に辿る。
+.PD
+.RE
+.PP
+リストは 3 つのデータ構造の中で最も単純であり、 上記の機能のみをサポートする。
+
+テールキューは以下の機能を追加する:
+.RS 4
+.IP * 4
+エントリをリストの最後に追加できる。
+.RE
+.PP
+ただし:
+.sp
+.RS 4
+.PD 0
+.IP 1. 4
+全てのリスト挿入と削除において、リストの先頭を指定しなければならない。
+.IP 2.
+各先頭エントリは 1 つではなく 2 つのポインタを必要とする。
+.IP 3.
+リストと比べて、コードサイズは 15% 大きくなり、操作は 20% 遅くなる。
+.PD
+.RE
+.PP
+循環キューは以下の機能を追加する:
+.sp
+.RS 4
+.PD 0
+.IP * 4
+エントリをリストの最後に追加できる。
+.IP *
+エントリを他のエントリの前に追加できる。
+.IP *
+逆方向に末尾から先頭へ辿ることができる。
+.PD
+.RE
+.PP
+ただし:
+.sp
+.RS 4
+.PD 0
+.IP 1. 4
+全てのリスト挿入と削除において、リストの先頭を指定しなければならない。
+.IP 2.
+各先頭エントリは 1 つではなく 2 つのポインタを必要とする。
+.IP 3.
+辿る際の終了条件がより複雑である。
+.IP 4.
+リストと比べて、コードサイズは 40% 大きくなり、操作は 45% 遅くなる。
+.PD
+.RE
+.PP
+マクロ定義において \fITYPE\fP はユーザ定義構造体の名前であり、 \fBLIST_ENTRY\fP, \fBTAILQ_ENTRY\fP,
+\fBCIRCLEQ_ENTRY\fP の何れか型のフィールドと 指定された \fINAME\fP を含まなければならない。 引き数 \fIHEADNAME\fP
+はユーザ定義構造体の名前であり、 マクロ \fBLIST_HEAD\fP, \fBTAILQ_HEAD\fP, \fBCIRCLEQ_HEAD\fP
+を用いて宣言されなければならない。 これらのマクロがどのように使われるかについての更なる説明は、 以下の例を参照すること。
+.SS リスト
+リストの先頭には、 \fBLIST_HEAD\fP マクロで定義される構造体が置かれる。 この構造体はリストの最初の要素へのポインタを 1 つ含む。 要素は
+2 重にリンクされており、 任意の要素はリストを辿らずに削除できる。 新しい要素は既存の要素の後またはリストの先頭に追加できる。
+\fBLIST_HEAD\fP 構造体は以下のように宣言されている:
+.in +4n
+.nf
+
+LIST_HEAD(HEADNAME, TYPE) head;
+.fi
+.in
+.PP
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP はリンク内でリンクされる要素の型である。
+リストの先頭へのポインタは、その後で次のように宣言される:
+.in +4n
+.nf
+
+struct HEADNAME *headp;
+.fi
+.in
+.PP
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
+.PP
+マクロ \fBLIST_ENTRY\fP はリストの要素を接続する構造体を宣言する。
+.PP
+マクロ \fBLIST_INIT\fP は \fIhead\fP で参照されるリストを初期化する。
+.PP
+マクロ \fBLIST_INSERT_HEAD\fP は新たな要素 \fIelm\fP をリストの先頭に挿入する。
+.PP
+マクロ \fBLIST_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
+.PP
+マクロ \fBLIST_REMOVE\fP は要素 \fIelm\fP をリストから削除する。
+.SS リストの例
+.nf
+LIST_HEAD(listhead, entry) head;
+struct listhead *headp;                 /* リストの先頭。*/
+struct entry {
+    ...
+    LIST_ENTRY(entry) entries;          /* リスト。 */
+    ...
+} *n1, *n2, *np;
+
+LIST_INIT(&head);                       /* リストを初期化する。*/
+
+n1 = malloc(sizeof(struct entry));      /* 先頭に挿入する。*/
+LIST_INSERT_HEAD(&head, n1, entries);
+
+n2 = malloc(sizeof(struct entry));      /* 後ろに挿入する。*/
+LIST_INSERT_AFTER(n1, n2, entries);
+                                        /* 順方向に辿る。*/
+for (np = head.lh_first; np != NULL; np = np\->entries.le_next)
+    np\-> ...
+
+.\" FIXME http://sourceware.org/bugzilla/show_bug.cgi?id=1506
+while (head.lh_first != NULL)           /* 削除する。*/
+    LIST_REMOVE(head.lh_first, entries);
+.fi
+.SS テールキュー
+テールキューの先頭には \fBTAILQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
+つはテールキューの最初の要素へのポインタであり、 もう 1 つはテールキューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
+任意の要素はテールキューを辿らずに削除できる。 新しい要素は既存の要素の後またはテールキューの先頭または末尾に追加できる。 \fBTAILQ_HEAD\fP
+構造体は以下のように定義されている:
+.in +4n
+.nf
+
+TAILQ_HEAD(HEADNAME, TYPE) head;
+.fi
+.in
+.PP
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP はテールキュー内でリンクされる要素の型である。
+テールキューの先頭へのポインタは、その後で次のように宣言される:
+.in +4n
+.nf
+
+struct HEADNAME *headp;
+.fi
+.in
+.PP
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
+.PP
+マクロ \fBTAILQ_ENTRY\fP はテールキューの要素を接続する構造体を宣言する。
+.PP
+マクロ \fBTAILQ_INIT\fP は \fIhead\fP で参照されるテールキューを初期化する。
+.PP
+マクロ \fBTAILQ_INSERT_HEAD\fP は新たな要素 \fIelm\fP をテールキューの先頭に挿入する。
+.PP
+マクロ \fBTAILQ_INSERT_TAIL\fP は新たな要素 \fIelm\fP をテールキューの末尾に挿入する。
+.PP
+マクロ \fBTAILQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
+.PP
+マクロ \fBTAILQ_REMOVE\fP は要素 \fIelm\fP をテールキューから削除する。
+.SS テールキューの例
+.nf
+TAILQ_HEAD(tailhead, entry) head;
+struct tailhead *headp;                 /* テールキューの先頭。*/
+struct entry {
+    ...
+    TAILQ_ENTRY(entry) entries;         /* テールキュー。*/
+    ...
+} *n1, *n2, *np;
+
+TAILQ_INIT(&head);                      /* キューを初期化する。*/
+
+n1 = malloc(sizeof(struct entry));      /* 先頭に挿入する。*/
+TAILQ_INSERT_HEAD(&head, n1, entries);
+
+n1 = malloc(sizeof(struct entry));      /* 末尾に挿入する。*/
+TAILQ_INSERT_TAIL(&head, n1, entries);
+
+n2 = malloc(sizeof(struct entry));      /* 後ろに挿入する。*/
+TAILQ_INSERT_AFTER(&head, n1, n2, entries);
+                                        /* 順方向に辿る。*/
+for (np = head.tqh_first; np != NULL; np = np\->entries.tqe_next)
+    np\-> ...
+                                        /* 削除する。*/
+while (head.tqh_first != NULL)
+    TAILQ_REMOVE(&head, head.tqh_first, entries);
+.fi
+.SS 循環キュー
+循環キューの先頭には \fBCIRCLEQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
+つは循環キューの最初の要素へのポインタであり、 もう 1 つは循環キューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
+任意の要素はキューを辿らずに削除できる。 新しい要素は、既存の要素の後または前、またはキューの先頭または末尾に追加できる。 A
+\fBCIRCLEQ_HEAD\fP 構造体は以下のように定義されている:
+.in +4n
+.nf
+
+CIRCLEQ_HEAD(HEADNAME, TYPE) head;
+.fi
+.in
+.PP
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP は循環キュー内でリンクされる要素の型である。
+循環キューの先頭へのポインタは、その後で次のように宣言される:
+.in +4n
+.nf
+
+struct HEADNAME *headp;
+.fi
+.in
+.PP
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
+.PP
+マクロ \fBCIRCLEQ_ENTRY\fP は循環キューの要素を接続する構造体を宣言する。
+.PP
+マクロ \fBCIRCLEQ_INIT\fP は \fIhead\fP で参照される循環キューを初期化する。
+.PP
+マクロ \fBCIRCLEQ_INSERT_HEAD\fP は新たな要素 \fIelm\fP を循環キューの先頭に挿入する。
+.PP
+マクロ \fBCIRCLEQ_INSERT_TAIL\fP は新たな要素 \fIelm\fP を循環キューの末尾に挿入する。
+.PP
+マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
+.PP
+マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の前に挿入する。
+.PP
+マクロ \fBCIRCLEQ_REMOVE\fP は要素 \fIelm\fP を循環キューから削除する。
+.SS 循環キューの例
+.nf
+CIRCLEQ_HEAD(circleq, entry) head;
+struct circleq *headp;                  /* 循環キューの先頭。*/
+struct entry {
+    ...
+    CIRCLEQ_ENTRY(entry) entries;       /* 循環キュー。*/
+    ...
+} *n1, *n2, *np;
+
+CIRCLEQ_INIT(&head);                    /* 循環キューを初期化する。*/
+
+n1 = malloc(sizeof(struct entry));      /* 先頭に挿入する。*/
+CIRCLEQ_INSERT_HEAD(&head, n1, entries);
+
+n1 = malloc(sizeof(struct entry));      /* 末尾に挿入する。*/
+CIRCLEQ_INSERT_TAIL(&head, n1, entries);
+
+n2 = malloc(sizeof(struct entry));      /* 後ろに挿入する。*/
+CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
+
+n2 = malloc(sizeof(struct entry));      /* 前に挿入する。*/
+CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
+                                        /* 順方向に辿る。*/
+for (np = head.cqh_first; np != (void *)&head; np = np\->entries.cqe_next)
+    np\-> ...
+                                        /* 逆方向に辿る。*/
+for (np = head.cqh_last; np != (void *)&head; np = np\->entries.cqe_prev)
+    np\-> ...
+                                        /* 削除する。*/
+while (head.cqh_first != (void *)&head)
+    CIRCLEQ_REMOVE(&head, head.cqh_first, entries);
+.fi
+.SH 準拠
+POSIX.1\-2001 にはない。 BSD 系に存在する。 queue 関数は 4.4BSD で初めて登場した。
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man3/shm_open.3 b/draft/man3/shm_open.3
new file mode 100644 (file)
index 0000000..79bb143
--- /dev/null
@@ -0,0 +1,162 @@
+.\" Copyright (C) 2002 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
+.\"
+.\" FIXME . Add an example to this page
+.\"*******************************************************************
+.\"
+.\" 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 書式
+\fB#include <sys/mman.h>\fP
+.br
+\fB#include <sys/stat.h>\fP /* mode 定数用 */
+.br
+\fB#include <fcntl.h>\fP /* O_* 定数の定義用 */
+.sp
+\fBint shm_open(const char *\fP\fIname\fP\fB, int \fP\fIoflag\fP\fB, mode_t \fP\fImode\fP\fB);\fP
+.sp
+\fBint shm_unlink(const char *\fP\fIname\fP\fB);\fP
+.sp
+\fI\-lrt\fP でリンクする。
+.SH 説明
+\fBshm_open\fP()  は、POSIX 共有メモリ・オブジェクトを新規に作成/オープンしたり、 すでに存在するオブジェクトをオープンしたりする。
+POSIX 共有メモリ・オブジェクトは、実際には、関係のないプロセスが 共有メモリの同じ領域を \fBmmap\fP(2)
+するために使用することができる手段である。 \fBshm_unlink\fP()  は、逆の操作、つまり以前に \fBshm_open\fP()
+で作成されたオブジェクトの削除を行う。
+.LP
+.\" 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.
+.\" 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
+\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<sys/stat.h>\fP
+のインクルードにより得られる)。
+.sp
+新規に作成された共有メモリ・オブジェクトは長さ 0 で初期化される。 オブジェクトの大きさは \fBftruncate\fP(2)  を使って設定できる。
+共有メモリ・オブジェクトとして新規に確保されたバイトは自動的に 0 に初期化される。
+.TP 
+\fBO_EXCL\fP
+\fBO_CREAT\fP が一緒に指定されており、 \fIname\fP で指定された共有メモリ・オブジェクトが既に存在した場合、 エラーを返す。
+オブジェクトの存在確認と、存在しなかった場合のオブジェクト作成は、 必ず一連の操作として実行される (performed atomically)。
+.TP 
+\fBO_TRUNC\fP
+共有メモリ・オブジェクトがすでに存在した場合、 そのオブジェクトを 0 バイトに切り詰める。
+.LP
+これらのフラグ値の定義は \fI<fcntl.h>\fP のインクルードにより得られる。
+.LP
+成功して完了した場合、 \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 注意
+.LP
+POSIX は \fBO_RDONLY\fP と \fBO_TRUNC\fP が一緒に指定された場合の動作を未定義にしている。Linux では、
+既存の共有メモリ・オブジェクトに対する切り詰め (truncate) は成功する。 しかし、他の UNIX システムでも同じであるとは限らない。
+.LP
+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.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man5/charmap.5 b/draft/man5/charmap.5
new file mode 100644 (file)
index 0000000..ae31acc
--- /dev/null
@@ -0,0 +1,98 @@
+.\" This file is part of locale(1) which displays the settings of the
+.\" current locale.
+.\" Copyright (C) 1994  Jochen Hein (Hein@Student.TU-Clausthal.de)
+.\"
+.\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH CHARMAP 5 1994\-11\-28 "" "Linux User Manual"
+.SH 名前
+charmap \- 文字符号化を定義するための文字シンボル
+.SH 説明
+.\" Not true anymore:
+.\" The portable character set is defined in the file
+.\" .I /usr/lib/nls/charmap/POSIX
+.\" .I /usr/share/i18n/charmap/POSIX
+.\" for reference purposes.
+文字集合記述 (charmap) は使用できる文字集合とその符号化を定義する。 サポートされる全ての文字集合は妥当なサブセットとして \fB共通文字集合
+(portable character set)\fP を持たなければならない。
+.SS 文法
+charmap ファイルは以下のキーワードからなるヘッダーで始まる:
+.TP 
+\fI<codeset>\fP
+はコードセットの名前を指定する。
+.TP 
+\fI<mb_cur_max>\fP
+は複数バイト文字の一文字あたりの最大バイト数を指定する。 複数バイト文字は現在のところサポートされていない。デフォルトは 1 である。
+.TP 
+\fI<mb_cur_min>\fP
+は一文字あたりの最低バイト数を指定する。この値は \fBmb_cur_max\fP 以下でなければならない。 もし指定されなければデフォルトは
+\fBmb_cur_max\fP と同じである。
+.TP 
+\fI<escape_char>\fP
+ファイルの残りの部分でエスケープ・キャラクターとして使用する文字 を指定する。これで特殊な意味に解釈される文字をエスケープする。
+デフォルトはバックスラッシュ (\fB\e\fP)  である。
+.TP 
+\fI<comment_char>\fP
+はファイルの残りの部分でコメント・キャラクターとして使用する文字 を指定する。デフォルトではシャープ (\fB#\fP)  である。
+.PP
+charmap の定義そのものは第一カラムにキーワード \fBCHARMAP\fP を置くことで始める。
+
+以下の行は文字の符号化を定義するための二つの方法である:
+.TP 
+\fI<symbolic\-name> <encoding> <comments>\fP
+これは一つの文字とその符号化を定義する。
+.TP 
+\fI<symbolic\-name>...<symbolic\-name> <encoding> <comments>\fP
+この形式は複数の文字を定義する。これは複数バイト文字 (現在は実装されていない)  のみで有用である。
+.PP
+charmap の定義の最後の行は \fBEND CHARMAP\fP を置く。
+.SS シンボル名
+文字の \fBシンボル名 (symbolic name)\fP は \fB共通文字集合(portable character set)\fP
+の文字のみを含んでいる。 この名前はかぎかっこ < > で挟む。 \fB<escape_char>\fP
+に続く文字はそれ自身として解釈される。例えば \fB<\e\e\e>>\fP のような文字列は \fB\e>\fP
+というシンボル名をかぎかっこで狭んで表現している。
+.SS 文字符号化
+符号化は以下の三つの形式のどれかで表す:
+.TP 
+\fI<escape_char>d<数字>\fP
+は 10 進の数値を表す。
+.TP 
+\fI<escape_char>x<数字>\fP
+は 16 進の数値を表す。
+.TP 
+\fI<escape_char><数字>\fP
+.\" FIXME comments
+.\" FIXME char ... char
+は 8 進の数値を表す。
+.SH ファイル
+.\" .SH AUTHOR
+.\" Jochen Hein (jochen.hein@delphi.central.de)
+\fI/usr/share/i18n/charmaps/*\fP
+.SH 準拠
+POSIX.2.
+.SH 関連項目
+\fBlocale\fP(1), \fBlocaledef\fP(1), \fBlocaleconv\fP(3), \fBsetlocale\fP(3),
+\fBlocale\fP(5)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man5/dir_colors.5 b/draft/man5/dir_colors.5
new file mode 100644 (file)
index 0000000..2869da9
--- /dev/null
@@ -0,0 +1,237 @@
+.\" manpage for /etc/dir_colors, config file for dircolors(1)
+.\" extracted from color-ls 3.12.0.3 dircolors(1) manpage
+.\"
+.\" %%%LICENSE_START(LDPv1)
+.\" This file may be copied under the conditions described
+.\" in the LDP GENERAL PUBLIC LICENSE, Version 1, September 1998
+.\" that should have been distributed together with this file.
+.\" %%%LICENSE_END
+.\"
+.\" Modified Sat Dec 22 22:25:33 2001 by Martin Schulze <joey@infodrom.org>
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH DIR_COLORS 5 2001\-12\-26 GNU "Linux User Manual"
+.SH 名前
+dir_colors \- dircolors(1) の設定ファイル
+.SH 説明
+プログラム \fBls\fP(1)  は、環境変数 \fBLS_COLORS\fP を使い、ファイル名を何色で表示するかを決定する。 この環境変数は、通常
+
+.RS
+eval \`dircolors some_path/dir_colors\`
+.RE
+
+のようなコマンドで設定される。 このコマンドは \fI/etc/profile\fP や \fI/etc/csh.cshrc\fP
+といったシステムのシェル初期化ファイルにある。 (\fBdircolors\fP(1)  を参照すること。)  通常、ここで使われるファイルは
+\fI/etc/DIR_COLORS\fP であるが、ホームディレクトリの \fI.dir_colors\fP ファイルで上書きすることができる。
+.PP
+設定ファイルは 1 行毎に書かれたステートメントで構成される。 ハッシュマーク (#) が行の始めにある場合や、 ハッシュマークの前に少なくとも 1
+つの空白がある場合、 ハッシュマークの後ろはコメントとして扱われる。 空行は無視される。
+.PP
+このファイルの \fIグローバル\fP セクションは、 最初の \fBTERM\fP ステートメントより前にある任意のステートメントからなる。
+グローバルセクションにあるステートメントは、 すべての端末タイプについて有効であるとみなされる。 グローバルセクションの次には、 \fI端末固有\fP
+セクションが続く。 各端末固有セクションの先頭には、1 つ以上の \fBTERM\fP ステートメントが置かれる。 \fBTERM\fP
+ステートメントは、その後に続く宣言が適用される (環境変数 \fBTERM\fP で与えられる) 端末タイプを指定する。
+グローバル宣言をその後に続く端末固有の宣言で上書きすることが常に可能である。
+.PP
+次のステートメントが認識される。大文字と小文字は区別されない。
+.TP 
+\fBTERM \fP\fIterminal\-type\fP
+端末固有セクションを開始し、どの端末に適用するかを指定する。 複数の端末タイプに適用するため、複数の \fBTERM\fP ステートメントを使うことができる。
+.TP 
+\fBCOLOR yes|all|no|none|tty\fP
+(Slackware のみ; GNU \fBdircolors\fP(1)  では無視される。)  カラー表示を常に有効にするのか (\fIyes\fP または
+\fIall\fP)、 常に無効にするのか (\fIno\fP または \fInone\fP)、 出力先が端末の場合にのみ有効にするのか (\fItty\fP) を指定する。
+デフォルトは \fIno\fP である。
+.TP 
+\fBEIGHTBIT yes|no\fP
+(Slackware のみ; GNU \fBdircolors\fP(1)  では無視される。)  デフォルトで 8 ビットの ISO 8859
+文字を有効にするかを指定する。 互換性のため、1 で \fIyes\fP を、0 で \fIno\fP を指定することができる。 デフォルトは \fIno\fP である。
+.TP 
+\fBOPTIONS \fP\fIoptions\fP
+(Slackware のみ; GNU \fBdircolors\fP(1)  では無視される。)  コマンドラインオプションをデフォルトの \fBls\fP
+コマンドラインに追加する。 このオプションには、すべての有効な \fBls\fP のコマンドラインオプションを指定できる。
+オプションの前にはマイナス記号を置かなければならない。 \fBdircolors\fP がオプションの有効性を検証しない点に注意すること。
+.TP 
+\fBNORMAL \fP\fIcolor\-sequence\fP
+(ファイル名でない) 通常のテキストに使われる色を指定する。
+.TP 
+\fBFILE \fP\fIcolor\-sequence\fP
+通常のファイルに使われる色を指定する。
+.TP 
+\fBDIR \fP\fIcolor\-sequence\fP
+ディレクトリに使われる色を指定する。
+.TP 
+\fBLINK \fP\fIcolor\-sequence\fP
+シンボリックリンクに使われる色を指定する。
+.TP 
+\fBORPHAN \fP\fIcolor\-sequence\fP
+孤立した (存在しないファイルを指している)  シンボリックリンクに使われる色を指定する。 指定されない場合、 \fBls\fP は \fBLINK\fP
+の色を代わりに使う。
+.TP 
+\fBMISSING \fP\fIcolor\-sequence\fP
+行方不明のファイル (存在しないにもかかわらず シンボリックリンクが指しているファイル) に使われる色を指定する。 指定されない場合、 \fBls\fP は
+\fBFILE\fP の色を代わりに使う。
+.TP 
+\fBFIFO \fP\fIcolor\-sequence\fP
+FIFO (名前付きパイプ) に使われる色を指定する。
+.TP 
+\fBSOCK \fP\fIcolor\-sequence\fP
+ソケットに使われる色を指定する。
+.TP 
+\fBDOOR \fP\fIcolor\-sequence\fP
+(fileutils 4.1 以降でサポートされる)  door (Solaris 2.5 以降) で使われる色を指定する。
+.TP 
+\fBBLK \fP\fIcolor\-sequence\fP
+ブロックデバイススペシャルファイルに使われる色を指定する。
+.TP 
+\fBCHR \fP\fIcolor\-sequence\fP
+キャラクターデバイススペシャルファイルに使われる色を指定する。
+.TP 
+\fBEXEC \fP\fIcolor\-sequence\fP
+実行属性が設定されているファイルに使われる色を設定する。
+.TP 
+\fBLEFTCODE \fP\fIcolor\-sequence\fP
+ISO\ 6429 端末 (下記参照) 以外で \fIleft code\fP に使われる色を指定する。
+.TP 
+\fBRIGHTCODE \fP\fIcolor\-sequence\fP
+ISO\ 6429 端末 (下記参照) 以外で \fIright code\fP に使われる色を指定する。
+.TP 
+\fBENDCODE \fP\fIcolor\-sequence\fP
+ISO\ 6429 端末 (下記参照) 以外で \fIend code\fP に使われる色を指定する。
+.TP 
+\fB*\fP\fIextension\fP \fIcolor\-sequence\fP
+\fIextension\fP で終るすべてのファイルに使われる色を指定する。
+.TP 
+ \fB.\fP\fIextension\fP \fIcolor\-sequence\fP
+\fB*\fP.\fIextension\fP と同じ。 \fIextension\fP で終るすべてのファイルに使われる色を指定する。 ピリオドは拡張子に含まれ、
+\fBemacs\fP のバックアップファイル \fB~\fP のようなピリオドで始まらない拡張子を指定することができない点に注意すること。
+この形式は古いものと考えられている。
+.SS "ISO 6429 (ANSI) カラーシーケンス"
+最近のカラー表示可能な ASCII 端末の大部分は、 ISO 6429 (ANSI) カラーシーケンスを用いる。 \fBxterm\fP や広く使われている
+DEC VT100 クローンを含む カラー表示できない一般的な端末の多くは、 ISO 6429
+カラーコードを認識し、出力から実害なく削除するか、エミュレートする。 \fBls\fP は、カラー表示が有効であることを仮定し、ISO 6429
+コードをデフォルトで使う。
+
+ISO 6429 カラーシーケンスは、セミコロンで区切られた数字のシーケンスで作られる。 最も一般的なコードを示す。
+.sp
+.RS +.2i
+.ta 1.0i
+.nf
+ 0     デフォルトカラーを保存
+ 1     明るい色
+ 4     アンダーラインされたテキスト
+ 5     フラッシュするテキスト
+30     前景色:黒
+31     前景色:赤
+32     前景色:緑
+33     前景色:黄 (もしくは茶)
+34     前景色:青
+35     前景色:紫
+36     前景色:シアン
+37     前景色:白 (もしくは灰)
+40     背景色:黒
+41     背景色:赤
+42     背景色:緑
+43     背景色:黄 (もしくは茶)
+44     背景色:青
+45     背景色:紫
+46     背景色:シアン
+47     背景色:白 (もしくは灰)
+.fi
+.RE
+.sp
+システムと表示デバイスによっては、動作しないコマンドもある。
+.PP
+\fBls\fP は以下をデフォルトとして使う。
+.sp
+.RS +.2i
+.ta 1.0i 2.5i
+.nf
+\fBNORMAL\fP   0       (ファイル名でない) 通常のテキスト
+\fBFILE\fP     0       通常のファイル
+\fBDIR\fP      32      ディレクトリ
+\fBLINK\fP     36      シンボリックリンク
+\fBORPHAN\fP   未定義  孤立したシンボリックリンク
+\fBMISSING\fP  未定義  行方不明のファイル
+\fBFIFO\fP     31      名前付きパイプ (FIFO)
+\fBSOCK\fP     33      ソケット
+\fBBLK\fP      44;37   ブロックデバイス
+\fBCHR\fP      44;37   キャラクターデバイス
+\fBEXEC\fP     35      実行ファイル
+.fi
+.RE
+.sp
+デフォルトの設定を完全に認識できない端末プログラムも少数存在する。 ディレクトリをリストした後にすべてのテキストがカラー表示されたなら、
+\fBNORMAL\fP と \fBFILE\fP のコードを通常の前景色と背景色のための数値コードに変更すること。
+.SS "その他の端末タイプ (高度な設定)"
+カラー表示可能 (またはハイライト表示可能) だが、 異なるコードセットを使う端末 (あるいはプリンター!) を持っている場合でも、
+それに適した設定を作ることができる。 そのためには、 \fBLEFTCODE\fP, \fBRIGHTCODE\fP, \fBENDCODE\fP 定義を使う必要がある。
+.PP
+ファイル名を出力する場合、 \fBls\fP は " \fBLEFTCODE\fP \fItypecode\fP \fBRIGHTCODE\fP \fIfilename\fP
+\fBENDCODE\fP " という出力シーケンスを生成する。 ここで、 \fItypecode\fP はファイルのタイプや名前に依存したカラーシーケンスである。
+\fBENDCODE\fP が未定義の場合、シーケンス \fBLEFTCODE NORMAL RIGHTCODE\fP が代わりに使われる。 leftcode と
+rightcode の目的は、単に必要な打ち込む回数を減らす (さらに、見苦しいエスケープコードをユーザーに隠す) ことにある。
+シーケンスがその端末にとって適切でない場合、 行内のそれぞれのキーワード自身を指定して削除することができる。
+.PP
+\fB注意:\fP \fBENDCODE\fP が設定ファイルのグローバルセクションで定義されている場合、 ファイルの端末固有セクションで未定義にすることは
+\fIできない\fP。 これは、 \fBNORMAL\fP の定義が何も影響を及ぼさないことを意味する。 しかし、異なった \fBENDCODE\fP
+を指定することで同じ効果を得ることができる。
+.SS エスケープシーケンス
+カラーシーケンスやファイル名の拡張子で制御文字やブランク文字を指定するために、 C 言語スタイルの \e エスケープ表記と \fBstty\fP スタイルの
+^ 表記の両方を使うことができる。 C 言語スタイルの表記には以下の文字が含まれる。
+.sp
+.RS +.2i
+.ta 1.0i
+.nf
+\fB\ea\fP      ベル (ASCII 7)
+\fB\eb\fP      バックスペース (ASCII 8)
+\fB\ee\fP      エスケープ (ASCII 27)
+\fB\ef\fP      フォームフィード (ASCII 12)
+\fB\en\fP      改行 (ASCII 10)
+\fB\er\fP      キャリッジリターン (ASCII 13)
+\fB\et\fP      タブ (ASCII 9)
+\fB\ev\fP      垂直タブ (ASCII 11)
+\fB\e?\fP      デリート (ASCII 127)
+\fB\e\fP\fInnn\fP    (8 進数表記の) 任意の文字
+\fB\ex\fP\fInnn\fP   (16 進数表記の) 任意の文字
+\fB\e_\fP      スペース
+\fB\e\e\fP      バックスラッシュ (\e)
+\fB\e^\fP      キャレット (^)
+\fB\e#\fP      ハッシュマーク (#)
+.fi
+.RE
+.sp
+ハッシュマークを始めの文字として入力するときと同様に、 スペース・バックスラッシュ・キャレット・制御文字を文字列の任意の部分に
+入力するためには、エスケープが必要であることに注意すること。
+.SH ファイル
+.TP 
+\fI/etc/DIR_COLORS\fP
+システム全体の設定ファイル。
+.TP 
+\fI~/.dir_colors\fP
+ユーザー毎の設定ファイル。
+.PP
+このページは fileutils\-4.1 パッケージで使われている \fBdir_colors\fP のファイル形式について説明している。
+その他のバージョンでは少し違いがあるかも知れない。
+.SH 注意
+ISO 6429 端末で使われる \fBLEFTCODE\fP と \fBRIGHTCODE\fP のデフォルトの定義は、次のようになっている。
+.sp
+.RS +.2i
+.ta 1.0i
+.nf
+\fBLEFTCODE\fP  \ee[
+\fBRIGHTCODE\fP m
+.fi
+.RE
+.sp
+\fBENDCODE\fP のデフォルトは定義されていない。
+.SH 関連項目
+\fBdircolors\fP(1), \fBls\fP(1), \fBstty\fP(1), \fBxterm\fP(1)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man5/elf.5 b/draft/man5/elf.5
new file mode 100644 (file)
index 0000000..78cc5eb
--- /dev/null
@@ -0,0 +1,1363 @@
+.\"    $OpenBSD: elf.5,v 1.12 2003/10/27 20:23:58 jmc Exp $
+.\"Copyright (c) 1999 Jeroen Ruigrok van der Werven
+.\"All rights reserved.
+.\"
+.\" %%%LICENSE_START(PERMISSIVE_MISC)
+.\"Redistribution and use in source and binary forms, with or without
+.\"modification, are permitted provided that the following conditions
+.\"are met:
+.\"1. Redistributions of source code must retain the above copyright
+.\"   notice, this list of conditions and the following disclaimer.
+.\"2. Redistributions in binary form must reproduce the above copyright
+.\"   notice, this list of conditions and the following disclaimer in the
+.\"   documentation and/or other materials provided with the distribution.
+.\"
+.\"THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\"ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\"FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\"DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\"OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\"HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\"LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\"SUCH DAMAGE.
+.\" %%%LICENSE_END
+.\"
+.\"    $FreeBSD: src/share/man/man5/elf.5,v 1.21 2001/10/01 16:09:23 ru Exp $
+.\"
+.\" Slightly adapted - aeb, 2004-01-01
+.\" 2005-07-15, Mike Frysinger <vapier@gentoo.org>, various fixes
+.\" 2007-10-11, Mike Frysinger <vapier@gentoo.org>, various fixes
+.\" 2007-12-08, mtk, Converted from mdoc to man macros
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH ELF 5 2010\-06\-19 Linux "Linux Programmer's Manual"
+.SH 名前
+elf \- 実行可能リンクフォーマット (ELF) ファイルのフォーマット
+.SH 書式
+.nf
+.\" .B #include <elf_abi.h>
+\fB#include <elf.h>\fP
+.fi
+.SH 説明
+ヘッダファイル \fI<elf.h>\fP は ELF 実行可能バイナリファイルのフォーマットを定義する。
+これらのファイルとしては、通常の実行可能ファイル・ 再配置可能オブジェクトファイル・コアファイル・共有ライブラリがある。
+.PP
+ELF ファイルフォーマットを使う実行可能ファイルは、 ELF ヘッダの後にプログラムヘッダテーブルまたは セクションヘッダテーブル (またはその両方)
+が続く構成である。 ELF ヘッダは常にファイルのオフセット 0 にある。 プログラムヘッダテーブルとセクションヘッダテーブルの
+ファイル内でのオフセットは、ELF ヘッダに定義されている。 この 2 つのテーブルはファイルの残りの部分の詳細を記述する。
+.PP
+.\" Applications which wish to process ELF binary files for their native
+.\" architecture only should include
+.\" .I <elf_abi.h>
+.\" in their source code.
+.\" These applications should need to refer to
+.\" all the types and structures by their generic names
+.\" "Elf_xxx"
+.\" and to the macros by
+.\" ELF_xxx".
+.\" Applications written this way can be compiled on any architecture,
+.\" regardless of whether the host is 32-bit or 64-bit.
+.\" .PP
+.\" Should an application need to process ELF files of an unknown
+.\" architecture, then the application needs to explicitly use either
+.\" "Elf32_xxx"
+.\" or
+.\" "Elf64_xxx"
+.\" type and structure names.
+.\" Likewise, the macros need to be identified by
+.\" "ELF32_xxx"
+.\" or
+.\" "ELF64_xxx".
+.\" .PP
+このヘッダファイルは上記のヘッダを C 言語の構造体で記述し、 また動的セクション・再配置可能セクション・シンボルテーブルの構造体も 含んでいる。
+.PP
+以下の型は N ビットアーキテクチャで使われる (N=32,64 であり \fIElfN\fP は \fIElf32\fP または \fIElf64\fP を表し、
+\fIuintN_t\fP は \fIuint32_t\fP または \fIuint64_t\fP を表す):
+.in +4n
+.nf
+
+.\" Elf32_Size  Unsigned object size
+ElfN_Addr       符号なしのプログラムアドレス, uintN_t
+ElfN_Off        符号なしのファイルオフセット, uintN_t
+ElfN_Section    符号なしのセクションインデックス, uint16_t
+ElfN_Versym     符号なしのバージョンシンボル情報, uint16_t
+Elf_Byte        unsigned char
+ElfN_Half       uint16_t
+ElfN_Sword      int32_t
+ElfN_Word       uint32_t
+ElfN_Sxword     int64_t
+ElfN_Xword      uint64_t
+.fi
+.in
+.PP
+(注意: *BSD での用語は少し異なる。 \fIElf64_Half\fP は \fIElf32_Half\fP の 2 倍であり、
+\fIElf64Quarter\fP が \fIuint16_t\fP に用いられる。 混乱を避けるため、以下では、これらの型はサイズが自明な型に置き換えてある。)
+.PP
+このファイルフォーマットが定義する全てのデータ構造体は、 関連するクラスの "自然な" サイズと配置の指針に従う。
+必要な場合、データ構造体では明示的なパディング (padding, 詰め込み)  が行なわれる。これは 4 バイトオブジェクトに対する 4
+バイト配置を保証するためや、 構造体のサイズを 4 の倍数にするためなどである。
+.PP
+ELF ヘッダは型 \fIElf32_Ehdr\fP または \fIElf64_Ehdr\fP で記述される:
+.in +4n
+.nf
+
+#define EI_NIDENT 16
+
+typedef struct {
+    unsigned char e_ident[EI_NIDENT];
+    uint16_t      e_type;
+    uint16_t      e_machine;
+    uint32_t      e_version;
+    ElfN_Addr     e_entry;
+    ElfN_Off      e_phoff;
+    ElfN_Off      e_shoff;
+    uint32_t      e_flags;
+    uint16_t      e_ehsize;
+    uint16_t      e_phentsize;
+    uint16_t      e_phnum;
+    uint16_t      e_shentsize;
+    uint16_t      e_shnum;
+    uint16_t      e_shstrndx;
+} ElfN_Ehdr;
+.fi
+.in
+.PP
+.\" .Bl -tag -width "e_phentsize"
+フィールドは以下の意味を持つ:
+.TP  12
+\fIe_ident\fP
+このバイト配列は、プロセッサやファイルの他の部分には依存せずに、 ファイルを解釈 (interpret) するために指定される。
+この配列内のすべてのものは、接頭辞 \fBEI_\fP で始まるマクロの名前が付き、接頭辞 \fBELF\fP で始まる値を持つ。 以下のマクロが定義されている:
+.RS 12
+.\" .Bl -tag -width "EI_VERSION" \" EI_ABIVERSION
+.TP  12
+\fBEI_MAG0\fP
+マジックナンバーの第 1 バイト。 \fBELFMAG0\fP で埋めなければならない。 (0: 0x7f)
+.TP 
+\fBEI_MAG1\fP
+マジックナンバーの第 2 バイト。 \fBELFMAG1\fP で埋めなければならない。 (1: \(aqE\(aq)
+.TP 
+\fBEI_MAG2\fP
+マジックナンバーの第 3 バイト。 \fBELFMAG2\fP で埋めなければならない。 (2: \(aqL\(aq)
+.TP 
+\fBEI_MAG3\fP
+マジックナンバーの第 4 バイト。 \fBELFMAG3\fP で埋めなければならない。 (3: \(aqF\(aq)
+.TP 
+\fBEI_CLASS\fP
+第 5 バイトは、このバイナリのアーキテクチャを示す:
+.RS 12
+.\" .Bl -tag -width "ELFCLASSNONE" -compact
+.TP  14
+.PD 0
+\fBELFCLASSNONE\fP
+このクラスは不正である。
+.TP 
+\fBELFCLASS32\fP
+32 ビットアーキテクチャを定義する。 ファイルと仮想アドレス空間が 4 ギガバイトまでのマシンをサポートする。
+.TP 
+\fBELFCLASS64\fP
+64 ビットアーキテクチャを定義する。
+.PD
+.RE
+.\" .El
+.TP 
+\fBEI_DATA\fP
+.\" .Bl -tag -width "ELFDATA2LSB" -compact
+第 6 バイトはファイル内のプロセッサ固有データの データエンコーディングを指定する。 現在のところ以下のエンコーディングがサポートされている:
+.RS 12
+.TP  14
+.PD 0
+\fBELFDATANONE\fP
+不明なデータフォーマット。
+.TP 
+\fBELFDATA2LSB\fP
+2 の補数、リトルエンディアン。
+.TP 
+\fBELFDATA2MSB\fP
+2 の補数、ビッグエンディアン。
+.PD
+.RE
+.\" .El
+.TP 
+.PD 0
+\fBEI_VERSION\fP
+.\" .Bl -tag -width "EV_CURRENT" -compact
+ELF 仕様のバージョン番号:
+.RS 12
+.TP  14
+\fBEV_NONE\fP
+不正なバージョン。
+.TP 
+\fBEV_CURRENT\fP
+現在のバージョン。
+.PD
+.RE
+.\".El
+.TP 
+\fBEI_OSABI\fP
+.\" .Bl -tag -width "ELFOSABI_STANDALONE" -compact
+このバイトはオブジェクトのターゲットとなる オペレーティングシステムと ABI を示す。 他の ELF 構造体のフィールドには、
+プラットフォーム固有の意味を持つフラグや値を持つものもある; これらのフィールドの解釈は、このバイトの値によって決定される。 例えば:
+.RS 12
+.TP  20
+.PD 0
+\fBELFOSABI_NONE\fP
+.\" 0
+ELFOSABI_SYSV と同じ。
+.TP 
+\fBELFOSABI_SYSV\fP
+.\" 0
+.\" synonym: ELFOSABI_NONE
+UNIX System V ABI.
+.TP 
+\fBELFOSABI_HPUX\fP
+.\" 1
+HP\-UX ABI.
+.TP 
+\fBELFOSABI_NETBSD\fP
+.\" 2
+NetBSD ABI.
+.TP 
+\fBELFOSABI_LINUX\fP
+.\" 3
+.\" .TP
+.\" .BR ELFOSABI_HURD
+.\" Hurd ABI.
+.\" 4
+.\" .TP
+.\" .BR ELFOSABI_86OPEN
+.\" 86Open Common IA32 ABI.
+.\" 5
+Linux ABI.
+.TP 
+\fBELFOSABI_SOLARIS\fP
+.\" 6
+.\" .TP
+.\" .BR ELFOSABI_MONTEREY
+.\" Monterey project ABI.
+.\" Now replaced by
+.\" ELFOSABI_AIX
+.\" 7
+Solaris ABI.
+.TP 
+\fBELFOSABI_IRIX\fP
+.\" 8
+IRIX ABI.
+.TP 
+\fBELFOSABI_FREEBSD\fP
+.\" 9
+FreeBSD ABI.
+.TP 
+\fBELFOSABI_TRU64\fP
+.\" 10
+.\" ELFOSABI_MODESTO
+.\" 11
+.\" ELFOSABI_OPENBSD
+.\" 12
+TRU64 UNIX ABI.
+.TP 
+\fBELFOSABI_ARM\fP
+.\" 97
+ARM アーキテクチャ ABI.
+.TP 
+\fBELFOSABI_STANDALONE\fP
+.\" 255
+.\" .El
+スタンドアロン (組み込み) ABI.
+.PD
+.RE
+.TP 
+\fBEI_ABIVERSION\fP
+このバイトはオブジェクトがターゲットとしている ABI のバージョンを示す。 このフィールドは互換性のない ABI
+のバージョンを区別するために使われる。 このバージョン番号の解釈は、 \fBEI_OSABI\fP フィールドで識別される ABI に依存する。
+この仕様に準拠するアプリケーションは、値 0 を使う。
+.TP 
+\fBEI_PAD\fP
+.\" As reported by Yuri Kozlov and confirmed by Mike Frysinger, EI_BRAND is
+.\" not in GABI (http://www.sco.com/developers/gabi/latest/ch4.eheader.html)
+.\" It looks to be a BSDism
+.\" .TP
+.\" .BR EI_BRAND
+.\" Start of architecture identification.
+パディングの開始。 これらのバイトは予約されており、0 に設定されている。 これらを読み込むプログラムは、これらのバイトを無視すべきである。
+現在使われていないバイトに意味が与えられる場合、 \fBEI_PAD\fP の値は将来変更されるかもしれない。
+.TP 
+\fBEI_NIDENT\fP
+.\" .El
+\fIe_ident\fP 配列のサイズ。
+.RE
+.TP 
+\fIe_type\fP
+この構造体のメンバはオブジェクトファイルタイプを示す:
+.RS 12
+.\" .Bl -tag -width "ET_NONE" -compact
+.TP  12
+.PD 0
+\fBET_NONE\fP
+不明なタイプ。
+.TP 
+\fBET_REL\fP
+再配置可能ファイル。
+.TP 
+\fBET_EXEC\fP
+実行可能ファイル。
+.TP 
+\fBET_DYN\fP
+共有オブジェクト。
+.TP 
+\fBET_CORE\fP
+コアファイル。
+.PD
+.RE
+.\" .El
+.TP 
+\fIe_machine\fP
+このメンバは個々のファイルに必要とされるアーキテクチャを指定する。 例:
+.RS 12
+.\" .Bl -tag -width "EM_MIPS_RS4_BE" -compact
+.TP  12
+.PD 0
+\fBEM_NONE\fP
+.\" 0
+不明なマシン。
+.TP 
+\fBEM_M32\fP
+.\" 1
+AT&T WE 32100.
+.TP 
+\fBEM_SPARC\fP
+.\" 2
+Sun Microsystems SPARC.
+.TP 
+\fBEM_386\fP
+.\" 3
+Intel 80386.
+.TP 
+\fBEM_68K\fP
+.\" 4
+Motorola 68000.
+.TP 
+\fBEM_88K\fP
+.\" 5
+.\" .TP
+.\" .BR EM_486
+.\" Intel 80486.
+.\" 6
+Motorola 88000.
+.TP 
+\fBEM_860\fP
+.\" 7
+Intel 80860.
+.TP 
+\fBEM_MIPS\fP
+.\" 8
+.\" EM_S370
+.\" 9
+.\" .TP
+.\" .BR EM_MIPS_RS4_BE
+.\" MIPS RS4000 (big-endian only). Deprecated.
+.\" 10
+.\" EM_MIPS_RS3_LE (MIPS R3000 little-endian)
+.\" 10
+MIPS RS3000 (ビッグエンディアンのみ)。
+.TP 
+\fBEM_PARISC\fP
+.\" 15
+HP/PA.
+.TP 
+\fBEM_SPARC32PLUS\fP
+.\" 18
+拡張命令セット付き SPARC。
+.TP 
+\fBEM_PPC\fP
+.\" 20
+PowerPC.
+.TP 
+\fBEM_PPC64\fP
+.\" 21
+PowerPC 64\-bit.
+.TP 
+\fBEM_S390\fP
+.\" 22
+IBM S/390
+.TP 
+\fBEM_ARM\fP
+.\" 40
+Advanced RISC Machines
+.TP 
+\fBEM_SH\fP
+.\" 42
+Renesas SuperH
+.TP 
+\fBEM_SPARCV9\fP
+.\" 43
+SPARC v9 64\-bit.
+.TP 
+\fBEM_IA_64\fP
+.\" 50
+Intel Itanium
+.TP 
+\fBEM_X86_64\fP
+.\" 62
+AMD x86\-64
+.TP 
+\fBEM_VAX\fP
+.\" 75
+.\" EM_CRIS
+.\" 76
+.\" .TP
+.\" .BR EM_ALPHA
+.\" Compaq [DEC] Alpha.
+.\" .TP
+.\" .BR EM_ALPHA_EXP
+.\" Compaq [DEC] Alpha with enhanced instruction set.
+DEC Vax.
+.PD
+.RE
+.\" .El
+.TP 
+\fIe_version\fP
+.\" .Bl -tag -width "EV_CURRENT" -compact
+このメンバはファイルバージョンを示す:
+.RS 12
+.TP  12
+.PD 0
+\fBEV_NONE\fP
+不正なバージョン。
+.TP 
+\fBEV_CURRENT\fP
+.\" .El
+現在のバージョン。
+.PD
+.RE
+.TP 
+\fIe_entry\fP
+このメンバは、システムが最初に制御を渡す、 つまりプロセスを開始する仮想アドレスを指定する。 ファイルにエントリポイントが関連付けられていない場合、
+このメンバには 0 が入る。
+.TP 
+\fIe_phoff\fP
+このメンバはプログラムヘッダテーブルの ファイルオフセット (バイト単位) を保持する。 ファイルにプログラムヘッダテーブルがない場合、 このメンバには
+0 が入る。
+.TP 
+\fIe_shoff\fP
+このメンバはセクションヘッダテーブルの ファイルオフセット (バイト単位) を保持する。 ファイルにセクションヘッダテーブルがない場合、 このメンバには
+0 が入る。
+.TP 
+\fIe_flags\fP
+このメンバはファイルに関連付けられたプロセッサ固有のフラグを保持する。 フラグの名前は EF_`machine_flag' という形式である。
+現在のところフラグは定義されていない。
+.TP 
+\fIe_ehsize\fP
+このメンバは ELF ヘッダサイズ (バイト単位) を保持する。
+.TP 
+\fIe_phentsize\fP
+このメンバはこのファイルのプログラムヘッダテーブルの 1 エントリあたりのサイズ (バイト単位) を保持する; 全てのエントリは同じサイズである。
+.TP 
+\fIe_phnum\fP
+このメンバはプログラムヘッダテーブルにあるエントリの数を保持する。 よって \fIe_phentsize\fP と \fIe_phnum\fP の積がテーブルサイズ
+(バイト単位) になる。 ファイルにプログラムヘッダがない場合、 \fIe_phnum\fP は値 0 を保持する。
+.IP
+.\" This is a Linux extension, added in Linux 2.6.34.
+.\" .Bl -tag -width "PN_XNUM"
+プログラムヘッダテーブルのエントリー数が \fBPN_XNUM\fP (0xffff) 以上の場合、
+このメンバは \fBPN_XNUM\fP (0xffff) になり、プログラムヘッダテーブルの
+エントリーの実際の数は、セクションヘッダテーブルの最初のエントリーの
+\fIsh_info\fP メンバに格納される。それ以外の場合、セクションヘッダテーブルの
+最初のエントリーの \fIsh_info\fP メンバには値 0 が格納される。
+.RS 12
+.TP  9
+\fBPN_XNUM\fP
+\fIe_phnum\fP が保持できる最大値を表し、 0xffff に定義されている。 \fIe_phnum\fP
+はプログラムヘッダの実際の数がどこに割り当てられているかを示す。
+.PD
+.RE
+.\" .El
+.IP
+.TP 
+\fIe_shentsize\fP
+このメンバはセクションヘッダのサイズ (バイト単位) を保持する。 セクションヘッダはセクションヘッダテーブルの 1 つのエントリである;
+全てのエントリは同じサイズである。
+.TP 
+\fIe_shnum\fP
+このメンバはセクションヘッダテーブルにあるエントリの数を保持する。 よって \fIe_shentsize\fP と \fIe_shnum\fP
+の積はセクションヘッダテーブルのサイズ (バイト単位) になる。 ファイルにセクションヘッダテーブルがない場合、 \fIe_shnum\fP は値 0
+を保持する。
+.IP
+セクションヘッダテーブルのエントリー数が \fBSHN_LORESERVE\fP (0xff00) 以上の場合、
+\fIe_shnum\fP には値 0 が入り、セクションヘッダテーブルのエントリーの実際の数は
+セクションヘッダテーブルの最初のエントリーの \fIsh_size\fP メンバに格納される。
+それ以外の場合、セクションヘッダテーブルの最初のエントリーの \fIsh_info\fP メンバ
+には値 0 が格納される。
+.TP 
+\fIe_shstrndx\fP
+このメンバはセクション名文字列テーブルに関連付けられたエントリの セクションヘッダテーブルインデックスを保持する。
+ファイルにセクション名文字列テーブルがない場合、 このメンバは値 \fBSHN_UNDEF\fP を保持する。 \fBSHN_UNDEF\fP.
+.IP
+セクション名前文字列テーブルのインデックスが \fBSHN_LORESERVE\fP (0xff00) 以上の
+場合、このメンバには \fBSHN_XINDEX\fP (0xffff) が入り、セクション名前文字列
+テーブルの実際のインデックスはセクションヘッダテーブルの最初のエントリーの
+\fIsh_link\fP メンバに格納される。それ以外の場合、セクションヘッダテーブルの
+最初のエントリーの \fIsh_link\fP メンバには値 0 が格納される。
+.RS 12
+.\" .Bl -tag -width "SHN_LORESERVE"
+.TP  14
+\fBSHN_UNDEF\fP
+この値は未定義・存在しない・無関係その他、 意味のないセクションの参照であることを表す。 例えば、セクション番号 \fBSHN_UNDEF\fP
+に関連づけて「定義」されたシンボルは、「未定義」なシンボルである。
+.TP 
+\fBSHN_LORESERVE\fP
+この値は予約済みのインデックス領域の下限を指定する。
+.TP 
+\fBSHN_LOPROC\fP
+この値以上で \fBSHN_HIPROC\fP 以下の値はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSHN_HIPROC\fP
+この値以下で \fBSHN_HIPROC\fP 以上の値はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSHN_ABS\fP
+この値は対応する参照の絶対値を指定する。 例えば、セクション番号 \fBSHN_ABS\fP に関連づけられたシンボルは絶対値を保持し、再配置に影響されない。
+.TP 
+\fBSHN_COMMON\fP
+このセクションに関連して定義されたシンボルは、 Fortran の COMMON や C の未割り当て external 変数のような、
+共通シンボルである。
+.TP 
+\fBSHN_HIRESERVE\fP
+この値は予約されたインデックスの範囲の上限を指定する。 \fBSHN_LORESERVE\fP と \fBSHN_HIRESERVE\fP は含まれる。
+この値はセクションヘッダテーブルを参照しない。 つまり、セクションヘッダテーブルは 予約されたインデックスのエントリを \fI含まない 。\fP
+.RE
+.\" .El
+.\" .El
+.PP
+実行可能ファイルまたは共有オブジェクトファイルのプログラムヘッダテーブルは、 システムによるプログラム実行準備に必要な、
+セグメント等の情報を記述する構造体の配列である。 オブジェクトファイルの \fIセグメント\fP には 1 つ以上の \fIセクション\fP が含まれる。
+プログラムヘッダは実行可能ファイルと共有オブジェクトファイルでのみ意味を持つ。 ファイルは自身のプログラムヘッダサイズを ELF ヘッダの
+\fIe_phentsize\fP メンバと \fIe_phnum\fP メンバで指定する。 ELF プログラムヘッダは \fIElf32_Phdr\fP 型または
+\fIElf64_Phdr\fP 型で記述される (どちらになるかはアーキテクチャ依存):
+.in +4n
+.nf
+
+typedef struct {
+    uint32_t   p_type;
+    Elf32_Off  p_offset;
+    Elf32_Addr p_vaddr;
+    Elf32_Addr p_paddr;
+    uint32_t   p_filesz;
+    uint32_t   p_memsz;
+    uint32_t   p_flags;
+    uint32_t   p_align;
+} Elf32_Phdr;
+.fi
+.in
+.in +4n
+.nf
+
+typedef struct {
+    uint32_t   p_type;
+    uint32_t   p_flags;
+    Elf64_Off  p_offset;
+    Elf64_Addr p_vaddr;
+    Elf64_Addr p_paddr;
+    uint64_t   p_filesz;
+    uint64_t   p_memsz;
+    uint64_t   p_align;
+} Elf64_Phdr;
+.fi
+.in
+.PP
+.\" .Bl -tag -width "p_offset"
+32 ビットと 64 ビットのプログラムヘッダの主な違いは、構造体における \fIp_flags\fP メンバの位置にある。
+.TP  12
+\fIp_type\fP
+.\" .Bl -tag -width "PT_DYNAMIC"
+Phdr 構造体のこのメンバは、 この配列要素がどのような種類のセグメントを記述しているか、 またはこの配列要素の情報をどのように解釈するか、を表す。
+.RS 12
+.TP  12
+\fBPT_NULL\fP
+この配列要素は使用されておらず、その他のメンバの値は未定義である。 これにより、このプログラムヘッダのエントリは無視される。
+.TP 
+\fBPT_LOAD\fP
+この配列要素は \fIp_filesz\fP と \fIp_memsz\fP で記述されるロード可能セグメントを指定する。
+このファイルからのバイトデータが、このメモリセグメントの先頭からマップされる。 セグメントのメモリサイズ \fISy\fPp_memsz がファイルサイズ
+\fISy\fPp_filesz より大きい場合、 「余った」バイトは値 0 となり、 そのセグメント初期化データの後ろに置かれると定められている。
+ファイルサイズはメモリサイズより大きくてはいけない。 プログラムヘッダテーブルのロード可能セグメントエントリは、 \fIp_vaddr\fP
+メンバの昇順にソートされて出現する。
+.TP 
+\fBPT_DYNAMIC\fP
+この配列要素は動的リンク情報を指定する。
+.TP 
+\fBPT_INTERP\fP
+この配列要素は、インタプリタとして起動されるパス名 (NULL 文字終端)  の位置とサイズを指定する。 このセグメント型は
+(共有オブジェクトにもあるかも知れないが)  実行可能ファイルでのみ意味を持つ。 ただし、このセグメント型は 1 つのファイルに 2
+回以上出現してはならない。 もし存在する場合、このセグメント型は 全てのロード可能セグメントエントリより前になければならない。
+.TP 
+\fBPT_NOTE\fP
+この配列要素は補足情報 (auxiliary information) の位置とサイズを指定する。
+.TP 
+\fBPT_SHLIB\fP
+このセグメント型は予約されているが、意味は指定されていない。 この型の配列要素を保持するプログラムは ABI に準拠しない。
+.TP 
+\fBPT_PHDR\fP
+この配列要素は、もし存在しているならば、 ファイルおよびプログラムのメモリイメージ双方における プログラムヘッダテーブル自身の位置とサイズを指定する。
+このセグメント型は 1 つのファイルに 2 回以上出現してはならない。 さらに、このセグメント型が存在してもよいのは、プログラムヘッダテーブルが
+プログラムのメモリイメージの一部である場合のみである。 もし存在する場合、これは全てのロード可能セグメントエントリより 前になければならない。
+.TP 
+\fBPT_LOPROC\fP
+この値以上で \fBPT_HIPROC\fP 以下の値はプロセッサ固有の意味に予約されている。
+.TP 
+\fBPT_HIPROC\fP
+この値以下で \fBPT_LOPROC\fP 以上の値はプロセッサ固有の意味に予約されている。
+.TP 
+\fBPT_GNU_STACK\fP
+.\" .El
+GNU 拡張であり、Linux カーネルが \fIp_flags\fP のメンバーにセットされたフラグ経由でスタックの状態を制御するために使用する。
+.RE
+.TP 
+\fIp_offset\fP
+このメンバは、セグメントの先頭バイトがある (ファイル先頭からの) オフセットを保持する。
+.TP 
+\fIp_vaddr\fP
+このメンバは、セグメントの先頭バイトがある メモリの仮想アドレスを保持する。
+.TP 
+\fIp_paddr\fP
+物理アドレスが意味をもつシステムでは、 このメンバはセグメントの物理アドレスとして予約されている。 BSD ではこのメンバは使用されない。0
+でなければならない。
+.TP 
+\fIp_filesz\fP
+このメンバはセグメントのファイルイメージのバイト数を保持する。 これは 0 でもよい。
+.TP 
+\fIp_memsz\fP
+このメンバはセグメントのメモリイメージのバイト数を保持する。 これは 0 でもよい。
+.TP 
+\fIp_flags\fP
+.\" .Bl -tag -width "PF_X" -compact
+このメンバはセグメントに関連するフラグのビットマスクを保持する:
+.RS 12
+.TP 
+.PD 0
+\fBPF_X\fP
+実行可能セグメント。
+.TP 
+\fBPF_W\fP
+書き込み可能セグメント.
+.TP 
+\fBPF_R\fP
+読み込み可能セグメント。
+.PD
+.RE
+.\" .El
+.IP
+テキストセグメントは一般にフラグ \fBPF_X\fP と \fBPF_R\fP を持つ。 データセグメントは一般に \fBPF_X\fP, \fBPF_W\fP,
+\fBPF_R\fP を持つ。
+.TP 
+\fIp_align\fP
+.\" .El
+このメンバは、セグメントがメモリおよびファイルにおいて配置 (align)  される値を保持する。
+ロード可能プロセスセグメントは、ページサイズを法として \fIp_vaddr\fP と \fIp_offset\fP と合同でなければならない
+(訳注:「p_vaddr mod ページサイズ = p_offset mod ページサイズ」 でなければならない)。。 0 と 1
+という値は配置が必要ないことを意味する。 それ以外の場合、 \fIp_align\fP は正で 2 の整数乗でなければならず、 \fIp_vaddr\fP は
+\fIp_align\fP を法として \fIp_offset\fP と合同でなければならない (訳注:「p_vaddr mod p_align =
+p_offset mod p_align」でなければならない)。
+.PP
+ファイルのセクションヘッダテーブルには、 全てのファイルセクションの場所が記述されている。 セクションヘッダテーブルは \fIElf32_Shdr\fP
+構造体または \fIElf64_Shdr\fP 構造体の配列である。 ELF ヘッダの \fIe_shoff\fP メンバはファイルの先頭から
+セクションヘッダテーブルへのバイトオフセットである。 \fIe_shnum\fP はセクションヘッダテーブルに含まれるエントリの数を保持する。
+\fIe_shentsize\fP は各エントリのサイズ (バイト単位) を保持する。
+.PP
+.\" .Bl -tag -width "SHN_LORESERVE"
+セクションヘッダテーブルインデックスは、この配列の添字である。
+いくつかのセクションヘッダテーブルインデックスは予約されている。予約されて
+いるのは、最初のエントリーと、\fBSHN_LORESERVE\fP と \fBSHN_HIRESERVE\fP の間の
+インデックスである。
+最初のエントリーは、ELF 拡張で \fIe_phnum\fP, \fIe_shnum\fP, \fIe_strndx\fP に使用
+される。それ以外の場合、最初のエントリーの各フィールドには 0 が設定される。
+オブジェクトファイルにはこれらの特別なインデックスに対応するセクションはない。
+.RS
+.TP  14
+\fBSHN_UNDEF\fP
+この値は未定義・不明・無関係・無意味なセクション参照の印となる。
+.TP 
+\fBSHN_LORESERVE\fP
+この値は予約済みのインデックス領域の下限を指定する。
+.TP 
+\fBSHN_LOPROC\fP
+この値以上で \fBSHN_HIPROC\fP 以下の値はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSHN_HIPROC\fP
+この値以下で \fBSHN_HIPROC\fP 以上の値はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSHN_ABS\fP
+この値は対応する参照の絶対値を指定する。 例えば、セクション番号 \fBSHN_ABS\fP に関連して定義されているシンボルは、
+絶対値を保持しているので、再配置に影響されない。
+.TP 
+\fBSHN_COMMON\fP
+このセクションに関連して定義されているシンボルは、 FORTRAN の COMMON や C の未割り当て外部変数のような共通シンボルである。
+.TP 
+\fBSHN_HIRESERVE\fP
+この値は予約済みのインデックス領域の上限を指定する。 システムは \fBSHN_LORESERVE\fP と \fBSHN_HIRESERVE\fP
+を含む範囲を予約する。 セクションヘッダテーブルは予約されたインデックスに対応するエントリを持たない。
+.RE
+.\" .El
+.PP
+セクションヘッダは以下の構造体を持つ:
+.in +4n
+.nf
+
+typedef struct {
+    uint32_t   sh_name;
+    uint32_t   sh_type;
+    uint32_t   sh_flags;
+    Elf32_Addr sh_addr;
+    Elf32_Off  sh_offset;
+    uint32_t   sh_size;
+    uint32_t   sh_link;
+    uint32_t   sh_info;
+    uint32_t   sh_addralign;
+    uint32_t   sh_entsize;
+} Elf32_Shdr;
+.fi
+.in
+.in +4n
+.nf
+
+typedef struct {
+    uint32_t   sh_name;
+    uint32_t   sh_type;
+    uint64_t   sh_flags;
+    Elf64_Addr sh_addr;
+    Elf64_Off  sh_offset;
+    uint64_t   sh_size;
+    uint32_t   sh_link;
+    uint32_t   sh_info;
+    uint64_t   sh_addralign;
+    uint64_t   sh_entsize;
+} Elf64_Shdr;
+.fi
+.in
+.PP
+.\" .Bl -tag -width "sh_addralign"
+32 ビットと 64 ビットのセクションヘッダには実際の違いはない。
+.TP  10
+\fIsh_name\fP
+このメンバはセクション名を定める。 この値はセクションヘッダ文字列テーブルセクションのインデックスであり、 NULL
+文字で終端された文字列の場所を示す。
+.TP 
+\fIsh_type\fP
+.\" .Bl -tag -width "SHT_PROGBITS"
+このメンバはセクションの内容と意味が含まれるカテゴリを示す。
+.RS 10
+.TP  15
+\fBSHT_NULL\fP
+この値はセクションヘッダが不活性であることを示す。 これは関連するセクションを持たない。 このセクションヘッダの他のメンバは、未定義の値を持つ。
+.TP 
+\fBSHT_PROGBITS\fP
+このセクションはプログラムにより定義される情報を保持する。 この情報の形式と意味は、ひとえにプログラムによって決定される。
+.TP 
+\fBSHT_SYMTAB\fP
+このセクションはシンボルテーブルを保持する。 一般には \fBSHT_SYMTAB\fP はリンク編集のためのシンボルを提供するが、 動的リンクにも使われる。
+完全なシンボルテーブルとして、動的リンクには不要な 多くのシンボルを保持できる。 オブジェクトファイルも \fBSHT_DYNSYM\fP
+セクションを持つことができる。
+.TP 
+\fBSHT_STRTAB\fP
+このセクションは文字列テーブルを保持する。 オブジェクトファイルは複数の文字列テーブルセクションを持つことができる。
+.TP 
+\fBSHT_RELA\fP
+このセクションは明示的な加数 (addend) を持つ再配置エントリを保持する。 再配置エントリの型は、オブジェクトファイルの 32 ビットクラスでは
+\fIElf32_Rela\fP である。 オブジェクトファイルは複数の再配置セクションを持つことができる。
+.TP 
+\fBSHT_HASH\fP
+このセクションはシンボルハッシュテーブルを保持する。 動的リンクされるオブジェクトは、 シンボルハッシュテーブルを含んでいなければならない。
+オブジェクトファイルは 1 つのハッシュテーブルのみを持つことができる。
+.TP 
+\fBSHT_DYNAMIC\fP
+このセクションは動的リンクの情報を保持する。 オブジェクトファイルは 1 つの動的セクションのみを持つことができる。
+.TP 
+\fBSHT_NOTE\fP
+このセクションはファイルに何らかの印を付ける情報を保持する。
+.TP 
+\fBSHT_NOBITS\fP
+このタイプのセクションはファイルの領域を使わないという以外は、 \fBSHT_PROGBITS\fP と似ている。 このセクションは 1 バイトも含まないが、
+\fIsh_offset\fP メンバは概念的なファイルオフセットを持つ。
+.TP 
+\fBSHT_REL\fP
+このセクションは明示的な加数を持たない再配置オフセットを保持する。 再配置オフセットの型は、オブジェクトファイルの 32 ビットクラスでは
+\fIElf32_Rel\fP である。 オブジェクトファイルは複数の再配置セクションを持つことができる。
+.TP 
+\fBSHT_SHLIB\fP
+このセクションは予約されているが、意味は指定されていない。
+.TP 
+\fBSHT_DYNSYM\fP
+このセクションは動的リンクシンボルの最小セットを保持する。 オブジェクトファイルは \fBSHT_SYMTAB\fP セクションも含むことができる。
+.TP 
+\fBSHT_LOPROC\fP
+この値以上で \fBSHT_HIPROC\fP 以下の範囲はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSHT_HIPROC\fP
+この値以下で \fBSHT_LOPROC\fP 以上の範囲はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSHT_LOUSER\fP
+この値はアプリケーションプログラムのために予約される インデックス範囲の下限を指定する。
+.TP 
+\fBSHT_HIUSER\fP
+.\" .El
+この値はアプリケーションプログラムのために予約される インデックス範囲の上限を指定する。 \fBSHT_LOUSER\fP から \fBSHT_HIUSER\fP
+の間のセクションタイプは、 現在または将来のシステム定義セクションタイプと衝突することなく、 アプリケーションで使用することができる。
+.RE
+.TP 
+\fIsh_flags\fP
+.\" .Bl -tag -width "SHF_EXECINSTR" -compact
+様々な属性を記述するための 1 ビットのフラグをサポートするセクション。 フラグビットが \fIsh_flags\fP
+に設定された場合、そのセクションについての属性は "オン" になる。 それ以外の場合、属性が "オフ" であるか属性が適用されない。 未定義の属性は 0
+に設定される。
+.RS 10
+.TP  15
+\fBSHF_WRITE\fP
+このセクションはプロセス実行中に書き込み可能なデータを含む。
+.TP 
+\fBSHF_ALLOC\fP
+このセクションはプロセス実行中にメモリを使用する。 制御セクションの中には、オブジェクトファイルのメモリイメージには 存在しないものもある。
+そうしたセクションの場合、この属性はオフである。
+.TP 
+\fBSHF_EXECINSTR\fP
+このセクションは実行可能なマシン命令を含む。
+.TP 
+\fBSHF_MASKPROC\fP
+このマスクに含まれる全てのビットはプロセッサ固有の意味に予約されている。
+.RE
+.\" .El
+.TP 
+\fIsh_addr\fP
+このセクションがプロセスのメモリイメージにある場合、 このメンバはセクションの最初のバイトが存在するアドレスを保持する。 それ以外の場合、このメンバは
+0 である。
+.TP 
+\fIsh_offset\fP
+このメンバの値は、ファイルの先頭からセクションの最初のバイトへの バイトオフセットを保持する。 セクションタイプ \fBSHT_NOBITS\fP
+はファイルの領域を全く使用せず、このタイプの \fIsh_offset\fP メンバはファイルの概念的な位置を示す。
+.TP 
+\fIsh_size\fP
+このメンバはセクションのサイズ (バイト単位) を保持する。 セクションタイプが \fBSHT_NOBITS\fP でない限り、そのセクションはファイル中の
+\fIsh_size\fP バイトを使用する。 タイプが \fBSHT_NOBITS\fP のセクションはサイズが 0 でないが、ファイルの領域を使用しない。
+.TP 
+\fIsh_link\fP
+このメンバは、セクションヘッダテーブルインデックスリンクを保持する。 この解釈はセクションタイプに依存する。
+.TP 
+\fIsh_info\fP
+このメンバは追加情報を保持する。 この解釈はセクションタイプに依存する。
+.TP 
+\fIsh_addralign\fP
+アドレス配置に制約があるセクションもある。 セクションが倍長語 (doubleword) を保持する場合、
+システムは全てのセクションについて倍長語の配置を保証しなければならない。 つまり、 \fIsh_addr\fP の値は \fIsh_addralign\fP
+の値を法として 0 と合同でなければならない (訳注:「sh_addr mod sh_addralign = 0 でなければならない)。 2 の 0
+乗と正の整数乗のみが許可される。 0 または 1 はセクションの配置に制約がないことを意味する。
+.TP 
+\fIsh_entsize\fP
+.\" .El
+シンボルテーブルのような固定サイズエントリのテーブルを保持する セクションもある。 このようなセクションでは、 このメンバは各エントリのサイズ
+(バイト単位) を表す。 このメンバが 0 の場合、 そのセクションは固定サイズエントリのテーブルを保持しない。
+.PP
+.\" .Bl -tag -width ".shstrtab"
+さまざまなセクションにプログラム情報・制御情報が保持される:
+.TP  10
+\&\fI.bss\fP
+このセクションはプログラムのメモリイメージに配置される 非初期化データを保持する。 定義上、システムはプログラムの実行開始時に、データを 0
+で初期化する。 このセクションのタイプは \fBSHT_NOBITS\fP である。 属性タイプは \fBSHF_ALLOC\fP と \fBSHF_WRITE\fP
+である。
+.TP 
+\&\fI.comment\fP
+このセクションはバージョン制御情報を保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。 属性タイプは使用されない。
+.TP 
+\&\fI.ctors\fP
+このセクションは C++ コンストラクタ関数への初期化されたポインタを保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+属性タイプは \fBSHF_ALLOC\fP と \fBSHF_WRITE\fP である。
+.TP 
+\&\fI.data\fP
+このセクションはプログラムのメモリイメージに配置される 初期化済みデータを保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+属性タイプは \fBSHF_ALLOC\fP と \fBSHF_WRITE\fP である。
+.TP 
+\&\fI.data1\fP
+このセクションはプログラムのメモリイメージに配置される 初期化済みデータを保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+属性タイプは \fBSHF_ALLOC\fP と \fBSHF_WRITE\fP である。
+.TP 
+\&\fI.debug\fP
+このセクションはシンボリックデバッグ用の情報を保持する。 その内容は指定されていない。 このセクションのタイプは \fBSHT_PROGBITS\fP
+である。 属性タイプは使用されない。
+.TP 
+\&\fI.dtors\fP
+このセクションは C++ デストラクタ関数への初期化されたポインタを保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+属性タイプは \fBSHF_ALLOC\fP と \fBSHF_WRITE\fP である。
+.TP 
+\&\fI.dynamic\fP
+このセクションは動的リンク情報を保持する。 このセクションの属性は \fBSHF_ALLOC\fP ビットを含む。 \fBSHF_WRITE\fP
+ビットが設定されるか否かはプロセッサによる。 このセクションのタイプは \fBSHT_DYNAMIC\fP である。 上記の属性を参照すること。
+.TP 
+\&\fI.dynstr\fP
+このセクションは動的リンクに必要な文字列を保持する。 最も一般的には、この文字列はシンボルテーブルエントリと 関連づけられた名前を表す。
+このセクションのタイプは \fBSHT_STRTAB\fP である。 使用される属性タイプは \fBSHF_ALLOC\fP である。
+.TP 
+\&\fI.dynsym\fP
+このセクションは動的リンクシンボルテーブルを保持する。 このセクションのタイプは \fBSHT_DYNSYM\fP である。 使用される属性タイプは
+\fBSHF_ALLOC\fP である。
+.TP 
+\&\fI.fini\fP
+このセクションはプロセス終了コードに置かれる実行可能命令を保持する。 プロセスが正常に終了した場合、システムはこのセクションにある
+コードを配置して実行する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。 使用される属性タイプは \fBSHF_ALLOC\fP と
+\fBSHF_EXECINSTR\fP である。
+.TP 
+\&\fI.gnu.version\fP
+このセクションはバージョン・シンボル・テーブルを保持する。 その内容は \fIElfN_Half\fP 要素の配列である。 このセクションのタイプは
+\fBSHT_GNU_versym\fP である。 使用される属性タイプは \fBSHF_ALLOC\fP である。
+.TP 
+\&\fI.gnu.version_d\fP
+このセクションはバージョンシンボルの定義を保持する。 その内容は \fIElfN_Verdef\fP 構造体のテーブルである。 このセクションのタイプは
+\fBSHT_GNU_verdef\fP である。 使用される属性タイプは \fBSHF_ALLOC\fP である。
+.TP 
+\&\fI.gnu.version_r\fP
+このセクションはバージョンシンボルが必要とする要素を保持する。 その内容は \fIElfN_Verneed\fP 構造体のテーブルである。
+このセクションのタイプは \fBSHT_GNU_versym\fP である。 使用される属性タイプは \fBshf_alloc\fP である。
+.TP 
+\&\fI.got\fP
+このセクションはグローバルオフセットテーブルを保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+属性はプロセッサ毎に異なる。
+.TP 
+\&\fI.hash\fP
+このセクションはシンボルハッシュテーブルを保持する。 セクションのタイプは \fBSHT_HASH\fP である。 使用される属性は \fBSHF_ALLOC\fP
+である。
+.TP 
+\&\fI.init\fP
+このセクションはプロセス初期化コードに配置される実行可能命令を保持する。 プログラムが実行を開始すると、
+システムはメインプログラムエントリポイントを呼び出す前に、 このセクションにあるコードを配置して実行する。 このセクションはのタイプは
+\fBSHT_PROGBITS\fP である。 使用される属性は \fBSHF_ALLOC\fP と \fBSHF_EXECINSTR\fP である。
+.TP 
+\&\fI.interp\fP
+このセクションはプログラムインタプリタのパス名を保持する。 ファイルにこのセクションを含むロード可能セグメントがある場合、 そのセクションの属性には
+\fBSHF_ALLOC\fP ビットが含まれる。 それ以外の場合このビットはオフになる。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+.TP 
+\&\fI.line\fP
+このセクションはシンボリックデバッグのための行番号情報を保持する。 ここにはプログラムソースコードとマシンコードの対応関係が記述される。
+内容は指定されていない。 このセクションのタイプは \fBSHT_PROGBITS\fP である。 属性タイプは使用されない。
+.TP 
+\&\fI.note\fP
+このセクションは "Note Section" 形式で情報を保持する。このセクションのタイプ
+は \fBSHT_NOTE\fP である。属性タイプは使用されない。通常 OpenBSD ネイティブ実行
+可能ファイルは自身を識別するために \fI.note.openbsd.ident\fP セクションを持つ。
+これによりカーネルは、ファイルをロードする際に 互換 ELF バイナリエミュレーショ
+ンテストを回避できる。
+.TP 
+\&\fI.note.GNU\-stack\fP
+このセクションは Linux のオブジェクトファイルで スタック属性を宣言するのに使用される。 セクションのタイプは \fBSHT_PROGBITS\fP
+である。使用される属性は \fBSHF_EXECINSTR\fP だけである。この属性は GNU リンカに対して オブジェクトファイルが実行可能なスタック
+(executable stack) を必要とする 示すものである。
+.TP 
+\&\fI.plt\fP
+このセクションは手続き (procedure) リンクテーブルを保持する。 このセクションのタイプは \fBSHT_PROGBITS\fP である。
+属性はプロセッサ毎に異なる。
+.TP 
+\&\fI.relNAME\fP
+このセクションは以下に記述される再配置情報を保持する。 ファイルが再配置を含むロード可能セグメントを持っている場合、 このセクションの属性は
+\fBSHF_ALLOC\fP ビットを含む。 それ以外の場合、そのビットはオフである。 慣例として、 "NAME"
+は再配置が適用されるセクションが指定される。 よって \fB.text\fP についての再配置セクションは、通常は \fB.rel.text\fP
+という名前を持つ。 このセクションのタイプは \fBSHT_REL\fP である。
+.TP 
+\&\fI.relaNAME\fP
+このセクションは以下に記述される再配置情報を保持する。 ファイルが再配置を含むロード可能セグメントを持っている場合、 このセクションの属性は
+\fBSHF_ALLOC\fP ビットを含む。 それ以外の場合、そのビットはオフである。 慣例として、 "NAME"
+は再配置が適用されるセクションが指定される。 よって \fB.text\fP についての再配置セクションは、通常は \fB.rela.text\fP
+という名前を持つ。 このセクションのタイプは \fBSHT_RELA\fP である。
+.TP 
+\&\fI.rodata\fP
+このセクションはリードオンリーのデータを保持する。 このデータはプロセスイメージにおける書き込み不可能なセグメントに置かれる。 このセクションのタイプは
+\fBSHT_PROGBITS\fP である。 使用される属性は \fBSHF_ALLOC\fP である。
+.TP 
+\&\fI.rodata1\fP
+このセクションはリードオンリーのデータを保持する。 このデータはプロセスイメージにおける書き込み不可能なセグメントに置かれる。 このセクションのタイプは
+\fBSHT_PROGBITS\fP である。 使用される属性は \fBSHF_ALLOC\fP である。
+.TP 
+\&\fI.shstrtab\fP
+このセクションはセクション名を保持する。 このセクションのタイプは \fBSHT_STRTAB\fP である。 属性タイプは使用されない。
+.TP 
+\&\fI.strtab\fP
+このセクションは文字列を保持する。 最も一般的なのは、シンボルテーブルエントリに関連づけられた 名前を表す文字列である。
+ファイルがシンボル文字列テーブルを含むロード可能セグメントを持つ場合、 セクションの属性は \fBSHF_ALLOC\fP ビットを含む。
+それ以外の場合、そのビットはオフである。 このセクションのタイプは \fBSHT_STRTAB\fP である。
+.TP 
+\&\fI.symtab\fP
+このセクションはシンボルテーブルを保持する。 ファイルがシンボルテーブルを含むロード可能セグメントを持つ場合、 セクションの属性は
+\fBSHF_ALLOC\fP ビットを含む。 それ以外の場合、ビットはオフである。 このセクションのタイプは \fBSHT_SYMTAB\fP である。
+.TP 
+\&\fI.text\fP
+.\" .El
+このセクションはプログラムの "テキスト" または実行可能命令を保持する。 セクションのタイプは \fBSHT_PROGBITS\fP である。
+使用される属性は \fBSHF_ALLOC\fP と \fBSHF_EXECINSTR\fP である。
+.PP
+文字列テーブルセクションは NULL 文字で終端されたキャラクタ配列 (通常文字列と呼ばれるもの) を保持する。 オブジェクトファイルはこれらの文字列を
+シンボル名とセクション名を表すために使う。 文字列は、文字列テーブルセクションへのインデックスとして参照される。 インデックス 0
+の最初のバイトは、NULL バイト (\(aq\e0\(aq) を 保持すると定義されている。 同様に文字列テーブルの最後のバイトも NULL
+文字を保持すると定義されている。 これは全ての文字列が NULL バイトで終端されていることを保証するためである。
+.PP
+オブジェクトファイルのシンボルテーブルは、 プログラムのシンボル定義と参照を配置または再配置するのに 必要な情報を保持する。
+.in +4n
+.nf
+
+typedef struct {
+    uint32_t      st_name;
+    Elf32_Addr    st_value;
+    uint32_t      st_size;
+    unsigned char st_info;
+    unsigned char st_other;
+    uint16_t      st_shndx;
+} Elf32_Sym;
+.fi
+.in
+.in +4n
+.nf
+
+typedef struct {
+    uint32_t      st_name;
+    unsigned char st_info;
+    unsigned char st_other;
+    uint16_t      st_shndx;
+    Elf64_Addr    st_value;
+    uint64_t      st_size;
+} Elf64_Sym;
+.fi
+.in
+.PP
+.\" .Bl -tag -width "st_value"
+32 ビット版と 64 ビット版は同じメンバを持ち、単に順番が異なるだけである。
+.TP  10
+\fIst_name\fP
+このメンバはオブジェクトファイルのシンボル文字列テーブルの インデックスを保持する。 シンボル文字列テーブルはシンボル名の文字表現を保持する。 この値が
+0 でない場合、シンボル名を得るための文字テーブルインデックスを表す。 それ以外の場合、シンボルテーブルは名前を持たない。
+.TP 
+\fIst_value\fP
+このメンバは関連づけられたシンボルの値を表す。
+.TP 
+\fIst_size\fP
+多くのシンボルにはそれに関連づけられたサイズがある。 シンボルがサイズを持たない場合、またはサイズが不明な場合、 このメンバは 0 である。
+.TP 
+\fIst_info\fP
+.\" .Bl -tag -width "STT_SECTION"
+このメンバはシンボルのタイプとバインディング (binding) 属性を指定する:
+.RS 10
+.TP  12
+\fBSTT_NOTYPE\fP
+シンボルのタイプが定義されていない。
+.TP 
+\fBSTT_OBJECT\fP
+シンボルはデータオブジェクトに関連づけられている。
+.TP 
+\fBSTT_FUNC\fP
+シンボルは関数またはその他の実行コードに関連づけられている。
+.TP 
+\fBSTT_SECTION\fP
+シンボルはセクションに関連づけられている。 このタイプのシンボルテーブルエントリは、 主として再配置のために存在し、通常は \fBSTB_LOCAL\fP
+バインディングを持つ。
+.TP 
+\fBSTT_FILE\fP
+慣例として、シンボルの名前は オブジェクトファイルに関連づけられたソースファイルの名前を指定する。 ファイルシンボルは \fBSTB_LOCAL\fP
+バインディングを持ち、そのセクションインデックスは \fBSHN_ABS\fP である。 ファイルシンボルは、ファイルに他の \fBSTB_LOCAL\fP
+シンボルがある場合は、それよりも先に来る。
+.TP 
+\fBSTT_LOPROC\fP
+この値以上で \fBSTT_HIPROC\fP 以下の範囲はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSTT_HIPROC\fP
+.\" .El
+.\" .Bl -tag -width "STB_GLOBAL"
+この値以下で \fBSTT_LOPROC\fP 以上の範囲はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSTB_LOCAL\fP
+局所的シンボルはその定義を含むオブジェクトファイルの外からは見えない。 同じ名前の局所的シンボルは、お互いに影響を受けることなく、
+複数のファイルに存在できる。
+.TP 
+\fBSTB_GLOBAL\fP
+大域的シンボルは結びつけられている全てのオブジェクトファイルから見える。 1 つのファイルで大域的シンボルが定義されていたら、
+他のファイルでは同じシンボルへの参照は未定義でなければならない。
+.TP 
+\fBSTB_WEAK\fP
+弱シンボルは大域的シンボルに似ているが、その定義は優先度が低い。
+.TP 
+\fBSTB_LOPROC\fP
+この値以上で \fBSTB_HIPROC\fP 以下の範囲はプロセッサ固有の意味に予約されている。
+.TP 
+\fBSTB_HIPROC\fP
+この値以下で \fBSTB_LOPROC\fP 以上の範囲はプロセッサ固有の意味に予約されている。
+.IP
+バインディングとタイプフィールドを パックしたりアンパックしたりするマクロがある:
+.IP
+\fBELF32_ST_BIND\fP(info)  または \fBELF64_ST_BIND\fP(info)  \fIst_info\fP
+の値からバインディングを取り出す。
+.IP
+\fBELF32_ST_TYPE\fP(info)  または \fBELF64_ST_TYPE\fP(info)
+.br
+\fIst_info\fP の値からタイプを取り出す。
+.IP
+\fBELF32_ST_INFO\fP(bind, type)  または \fBELF64_ST_INFO\fP(bind, type)
+.br
+バインディングとタイプを \fIst_info\fP の値に変換する。
+.RE
+.\" .El
+.TP 
+\fIst_other\fP
+.\" .Bl -tag -width "STV_PROTECTED"
+このメンバはシンボルの visibility (見える範囲) を規定する。
+.RS 10
+.TP  16
+.PD 0
+\fBSTV_DEFAULT\fP
+デフォルトのシンボル visibility ルール。
+.TP 
+\fBSTV_INTERNAL\fP
+プロセッサ固有の隠しクラス。
+.TP 
+\fBSTV_HIDDEN\fP
+シンボルは他のモジュールからは利用できない。
+.TP 
+\fBSTV_PROTECTED\fP
+横取りできず (not preemptible)、公開されない。
+.PD
+.PP
+visibility 種別を抽出するためのマクロがある。
+.PP
+\fBELF32_ST_VISIBILITY\fP(other)  または \fBELF64_ST_VISIBILITY\fP(other)
+.RE
+.\" .El
+.TP 
+\fIst_shndx\fP
+.\" .El
+各シンボルテーブルエントリは、いくつかのセクションに関連して "定義されている"。 このメンバは関連するセクションヘッダテーブルインデックスを保持する。
+.PP
+再配置はシンボル参照とシンボル定義を結合するプロセスである。 再配置可能ファイルはセクションの内容をどのように修正するかに関する
+情報を持たなければならない。 これにより、実行可能ファイルと共有オブジェクトファイルは
+プロセスのプログラムイメージについての正しい情報を持つことができる。 再配置エントリは以下のようなデータである。
+.PP
+加数を必要としない再配置構造体。
+.in +4n
+.nf
+
+typedef struct {
+    Elf32_Addr r_offset;
+    uint32_t   r_info;
+} Elf32_Rel;
+.fi
+.in
+.in +4n
+.nf
+
+typedef struct {
+    Elf64_Addr r_offset;
+    uint64_t   r_info;
+} Elf64_Rel;
+.fi
+.in
+.PP
+加数を必要とする再配置構造体。
+.in +4n
+.nf
+
+typedef struct {
+    Elf32_Addr r_offset;
+    uint32_t   r_info;
+    int32_t    r_addend;
+} Elf32_Rela;
+.fi
+.in
+.in +4n
+.nf
+
+typedef struct {
+    Elf64_Addr r_offset;
+    uint64_t   r_info;
+    int64_t    r_addend;
+} Elf64_Rela;
+.fi
+.in
+.\" .Bl -tag -width "r_offset"
+.TP  12
+\fIr_offset\fP
+このメンバは再配置動作が適用される位置を与える。 再配置可能ファイルの場合、この値はセクションの先頭から 再配置で影響を受ける格納単位 (storage
+unit) までのバイトオフセットである。 実行可能ファイルまたは共有オブジェクトの場合、 この値は再配置で影響を受ける格納単位の仮想アドレスである。
+.TP 
+\fIr_info\fP
+このメンバは、再配置が行われなければならないシンボルテーブルインデックスと、 適用される再配置のタイプの両方を与える。
+再配置タイプはプロセッサ毎に異なる。 テキストが再配置エントリの再配置タイプ またはシンボルテーブルインデックスを参照している場合、 それぞれエントリの
+\fIr_info\fP メンバに対して、それぞれ \fBELF[32|64]_R_TYPE\fP と \fBELF[32|64]_R_SYM\fP
+を適用した結果を意味する。
+.TP 
+\fIr_addend\fP
+.\" .El
+このメンバは定数の加数を指定する。 この加数は再配置可能フィールドに格納される値を計算するために使われる。
+.PP
+\&.dynamic セクションは、関連する動的リンク情報を保持している 一連の構造体を保持する。 d_tag メンバは d_un の解釈を制御する。
+.in +4n
+.nf
+
+typedef struct {
+    Elf32_Sword    d_tag;
+    union {
+        Elf32_Word d_val;
+        Elf32_Addr d_ptr;
+    } d_un;
+} Elf32_Dyn;
+extern Elf32_Dyn _DYNAMIC[];
+.fi
+.in
+.in +4n
+.nf
+
+typedef struct {
+    Elf64_Sxword    d_tag;
+    union {
+        Elf64_Xword d_val;
+        Elf64_Addr  d_ptr;
+    } d_un;
+} Elf64_Dyn;
+extern Elf64_Dyn _DYNAMIC[];
+.fi
+.in
+.\" .Bl -tag -width "d_tag"
+.TP  10
+\fId_tag\fP
+.\" .Bl -tag -width "DT_SYMBOLIC"
+このメンバは以下の値を持つことができる:
+.RS 10
+.TP  12
+\fBDT_NULL\fP
+動的セクションの終りのマーク
+.TP 
+\fBDT_NEEDED\fP
+必要なライブラリの名前への文字列テーブルオフセット
+.TP 
+\fBDT_PLTRELSZ\fP
+PLT 再配置 (reloc) テーブルのサイズ (バイト単位)
+.TP 
+\fBDT_PLTGOT\fP
+PLT と GOT (または何れか一方) のアドレス
+.TP 
+\fBDT_HASH\fP
+シンボルハッシュテーブルのアドレス
+.TP 
+\fBDT_STRTAB\fP
+文字列テーブルのアドレス
+.TP 
+\fBDT_SYMTAB\fP
+シンボルテーブルのアドレス
+.TP 
+\fBDT_RELA\fP
+Rela 再配置テーブルのアドレス
+.TP 
+\fBDT_RELASZ\fP
+Rela テーブルのサイズ (バイト単位)
+.TP 
+\fBDT_RELAENT\fP
+Rela テーブルエントリのサイズ (バイト単位)
+.TP 
+\fBDT_STRSZ\fP
+文字列テーブルのサイズ (バイト単位)
+.TP 
+\fBDT_SYMENT\fP
+シンボルテーブルエントリのサイズ (バイト単位)
+.TP 
+\fBDT_INIT\fP
+初期化関数のアドレス
+.TP 
+\fBDT_FINI\fP
+終了関数のアドレス
+.TP 
+\fBDT_SONAME\fP
+共有オブジェクトの名前への文字列テーブルオフセット
+.TP 
+\fBDT_RPATH\fP
+ライブラリ検索パスへの文字列テーブルオフセット (推奨されない)
+.TP 
+\fBDT_SYMBOLIC\fP
+リンカがシンボルの実行可能ファイルより前に この共有オブジェクトを検索した場合は、警告を出す。
+.TP 
+\fBDT_REL\fP
+Rel 再配置テーブルのアドレス
+.TP 
+\fBDT_RELSZ\fP
+Rel テーブルのサイズ (バイト単位)
+.TP 
+\fBDT_RELENT\fP
+Rel テーブルエントリのサイズ (バイト単位)
+.TP 
+\fBDT_PLTREL\fP
+PLT が参照する再配置テーブルのタイプ (Rela または Rel)
+.TP 
+\fBDT_DEBUG\fP
+デバッグのために使用されている。内容は定義されていない。
+.TP 
+\fBDT_TEXTREL\fP
+これが指定されていない場合、 書き込み不可のセグメントには再配置は適用されない。
+.TP 
+\fBDT_JMPREL\fP
+PLT 専用の再配置エントリのアドレス
+.TP 
+\fBDT_BIND_NOW\fP
+実行可能ファイルに制御を譲る前に、 全ての再配置を処理するように動的リンカに指示する。
+.TP 
+\fBDT_RUNPATH\fP
+ライブラリ検索パスへの文字列テーブルオフセット
+.TP 
+\fBDT_LOPROC\fP
+プロセッサ固有の意味の開始
+.TP 
+\fBDT_HIPROC\fP
+プロセッサ固有の意味の終了
+.RE
+.\" .El
+.TP 
+\fId_val\fP
+このメンバは様々な意味に解釈される整数値である。
+.TP 
+\fId_ptr\fP
+このメンバはプログラムの仮想アドレスを表す。 これらのアドレスを解釈する際に、 実際のアドレスは元々のファイルの値と
+メモリの基底アドレスから計算される。 ファイルにはこれらのアドレスを修正するための 再配置エントリを含めてはならない。
+.TP 
+\fI_DYNAMIC\fP
+.\" .El
+\&.dynamic セクションにある全ての動的構造体を含む配列。 これは自動的にリンカに渡される。
+.SH 注意
+.\" OpenBSD
+.\" ELF support first appeared in
+.\" OpenBSD 1.2,
+.\" although not all supported platforms use it as the native
+.\" binary file format.
+ELF は System V で初めて登場した。 ELF 自体は System V で初めて登場した。 ELF フォーマットは採択された標準である。
+.PP
+.\" .SH AUTHORS
+.\" The original version of this manual page was written by
+.\" .An Jeroen Ruigrok van der Werven
+.\" .Aq asmodai@FreeBSD.org
+.\" with inspiration from BSDi's
+.\" .Bsx
+.\" .Nm elf
+.\" man page.
+\fIe_phnum\fP, \fIe_shnum\fP, \fIe_strndx\fP に対する拡張は、いずれも Linux での拡張で
+ある。Sun, BSD, AMD64 もこれに対応している。詳しい情報は、関連項目を参照。
+.SH 関連項目
+\fBas\fP(1), \fBgdb\fP(1), \fBld\fP(1), \fBobjdump\fP(1), \fBexecve\fP(2), \fBcore\fP(5)
+.PP
+Hewlett\-Packard, \fIElf\-64 Object File Format\fP.
+.PP
+Santa Cruz Operation, \fISystem V Application Binary Interface\fP.
+.PP
+UNIX System Laboratories, "Object Files", \fIExecutable and Linking Format
+(ELF)\fP.
+.PP
+Sun Microsystems, \fILinker and Libraries Guide\fP.
+.PP
+AMD64 ABI Draft, \fISystem V Application Binary Interface AMD64 Architecture
+Processor Supplement\fP.
+.PP
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man5/locale.5 b/draft/man5/locale.5
new file mode 100644 (file)
index 0000000..c1e14b6
--- /dev/null
@@ -0,0 +1,330 @@
+.\" Copyright (C) 1994  Jochen Hein (Hein@Student.TU-Clausthal.de)
+.\" Copyright (C) 2008  Petr Baudis (pasky@suse.cz)
+.\"
+.\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
+.\" 2008-06-17 Petr Baudis <pasky@suse.cz>
+.\"     LC_TIME: Describe first_weekday and first_workday
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH LOCALE 5 2008\-06\-17 Linux "Linux User Manual"
+.SH 名前
+locale \- ロケール定義ファイル
+.SH 説明
+\fBロケール (locale)\fP 定義ファイルは \fBlocaledef\fP(1)  コマンドがバイナリのロケール・データベースに変換するのに
+必要な全ての情報を含んでいる。
+
+定義ファイルは、いくつかのセクションから構成されており、各セクション にはロケールのカテゴリが詳細に記述される。
+.SS 文法
+ロケール定義ファイルは以下のキーワードから構成されるヘッダーで始まる:
+.TP 
+\fI<escape_char>\fP
+ファイルの残りの部分でエスケープ・キャラクターとして使用する文字を 指定する。これは特殊な意味に解釈される文字をエスケープするのに使用する。
+デフォルトはバックスラッシュ (\e) である。
+.TP 
+\fI<comment_char>\fP
+ファイルの残りの部分でコメント・キャラクターとして使用する文字 を指定する。デフォルトではシャープ (#) である。
+.PP
+.\" FIXME glibc 2.2.2 added new nonstandard locale categories:
+.\" LC_ADDRESS, LC_IDENTIFICATION, LC_MEASUREMENT, LC_NAME,
+.\" LC_PAPER, LC_TELEPHONE.  These need to be documented.
+ロケールの定義はロケールのカテゴリ毎の定義を行う部分から構成される。 各部分は、定義済みの他のロケールのコピーを元に定義することもできるし、
+最初から定義することもできる。カテゴリをコピーする場合、定義の中に \fBcopy\fP というキーワードに続けてコピーするロケールの名前を書く。
+.SS LC_CTYPE
+\fBLC_CTYPE\fP カテゴリの定義は最初のカラムに \fILC_CTYPE\fP という文字列を置くことで始める。
+
+ここでは以下のキーワードが使用できる:
+.TP 
+\fIupper\fP
+大文字 (uppercase letter) のリストを指定する。 \fBA\fP から \fBZ\fP までの文字は自動的に含まれる。 \fBcntrl\fP,
+\fBdigit\fP, \fBpunct\fP, \fBspace\fP に指定された文字を指定することはできない。
+.TP 
+\fIlower\fP
+小文字 (lowercase letter) のリストを指定する。 \fBa\fP から \fBz\fP までの文字は自動的に含まれる。 \fBcntrl\fP,
+\fBdigit\fP, \fBpunct\fP, \fBspace\fP に指定された文字を指定することはできない。
+.TP 
+\fIalpha\fP
+アルファベットの文字を指定する。 \fBupper\fP と \fBlower\fP を指定した全ての文字は自動的に含まれる。 \fBcntrl\fP,
+\fBdigit\fP, \fBpunct\fP, \fBspace\fP に指定された文字を指定することはできない。
+.TP 
+\fIdigit\fP
+数字として使用される文字を指定する。数字としては \fB0\fP から \fB9\fP のみが使用できる。これらはデフォルトで含まれている。
+.TP 
+\fIspace\fP
+空白として使用する文字のリストを指定する。 \fBupper\fP, \fBlower\fP, \fBalpha\fP, \fBdigit\fP, \fBgraph\fP,
+\fBxdigit\fP に指定された文字を指定することはできない。 \fB<space>\fP, \fB<form\-feed>\fP,
+\fB<newline>\fP, \fB<carriage\-return>\fP, \fB<tab>\fP,
+\fB<vertical\-tab>\fP は自動的に含まれる。
+.TP 
+\fIcntrl\fP
+コントロール・キャラクターのリストを指定する。 \fBupper\fP, \fBlower\fP, \fBalpha\fP, \fBdigit\fP, \fBpunct\fP,
+\fBgraph\fP, \fBprint\fP, \fBxdigit\fP に指定された文字を指定することはできない。
+.TP 
+\fIpunct\fP
+句読点文字のリストを指定する。 \fBupper\fP, \fBlower\fP, \fBalpha\fP, \fBdigit\fP, \fBcntrl\fP, \fBxdigit\fP,
+\fB<space>\fP に指定された文字を指定することはできない。
+.TP 
+\fIgraph\fP
+表示可能文字のリストを指定するが、 \fB<space>\fP 文字は含まない。 \fBupper\fP, \fBlower\fP, \fBalpha\fP,
+\fBdigit\fP, \fBxdigit\fP, \fBpunct\fP を指定した文字は自動的に含まれる。 \fBcntrl\fP
+に指定された文字を指定することはできない。
+.TP 
+\fIprint\fP
+\fB<space>\fP 文字を含めた表示可能文字のリストを指定する。 \fBupper\fP, \fBlower\fP, \fBalpha\fP,
+\fBdigit\fP, \fBxdigit\fP, \fBpunct\fP, \fB<space>\fP に指定した文字は自動的に含まれる。 \fBcntrl\fP
+に指定された文字を指定することはできない。
+.TP 
+\fIxdigit\fP
+16 進数として使用する文字のリストを指定する。10 進の数字に加えて、 6 文字を昇順で続ける。デフォルトでは以下の文字が含まれている: \fB0\fP
+から \fB9\fP、 \fBa\fP から \fBf\fP、 \fBA\fP から \fBF\fP。
+.TP 
+\fIblank\fP
+\fB無地 (blank)\fP に分類される文字のリストを指定する。 \fB<space>\fP と \fB<tab>\fP
+は自動的に含まれる。
+.TP 
+\fItoupper\fP
+小文字から大文字への対応リストを指定する。各対応は小文字と大文字のペアを \fB,\fP で区切って括弧で括って指定する。
+リストの各メンバーはセミコロンで区切る。
+.TP 
+\fItolower\fP
+大文字から小文字への対応リストを指定する。tolower という キーワードが無い場合には toupper を逆にしたものが使用される。
+.PP
+\fBLC_CTYPE\fP の定義は \fIEND LC_CYTPE\fP という文字列で終了する。
+.SS LC_COLLATE
+\fBLC_COLLATE\fP カテゴリは整列順序を定義している。libc による制限のため POSIX オプションの全てが実装されているわけではない。
+
+このカテゴリの定義は最初のカラムに \fBLC_COLLATE\fP を置くことで始める。
+
+ここでは以下のキーワードが使用できる:
+.TP 
+\fIcollating\-element\fP
+.TP 
+\fIcollating\-symbol\fP
+.PP
+順序の定義は以下の行で始める:
+.TP 
+\fIorder_start\fP
+.PP
+これに \fBforward\fP, \fBbackward\fP, \fBposition\fP のいずれかのキーワードが続く。
+順序を記述する行が続き、以下のキーワードで終る:
+.TP 
+\fIorder_end\fP
+.PP
+より詳しくは \fI/usr/lib/nls/src\fP にあるソース・ファイルを参照のこと。特に \fBPOSIX\fP の例、 \fBExample\fP と
+\fBExample2\fP を見るとよい。
+.PP
+\fBLC_COLLATE\fP 定義は \fIEND LC_COLLATE\fP という文字列で終了する。
+.SS LC_MONETARY
+\fBLC_MONETARY\fP の定義は最初のカラムに \fBLC_MONETARY\fP を置くことで始める。
+
+ここでは以下のキーワードが使用できる:
+.TP 
+\fIint_curr_symbol\fP
+国際通貨記号を指定する。これは ISO 4217 規格に定義された国際通貨 記号 (3 文字) に区切り文字を続けた 4 文字である必要がある。
+.TP 
+\fIcurrency_symbol\fP
+地域的な通貨記号を指定する。
+.TP 
+\fImon_decimal_point\fP
+金額をフォーマットする際の小数点に使用する文字列を指定する。
+.TP 
+\fImon_thousands_sep\fP
+金額をフォーマットする際に桁の区切りに使用する文字列を指定する。
+.TP 
+\fImon_grouping\fP
+数字をフォーマットする際に何桁ごとに区切るかを指定する。
+.TP 
+\fIpositive_sign\fP
+数値において正の符号に使用する文字列を指定する。
+.TP 
+\fInegative_sign\fP
+数値において負の符号に使用する文字列を指定する。
+.TP 
+\fIint_frac_digits\fP
+\fBint_curr_symbol\fP でフォーマットする時に使用すべき端数の桁数を指定する。
+.TP 
+\fIfrac_digits\fP
+\fBcurrency_symbol\fP でフォーマットする際に使用すべき端数の桁数を指定する。
+.TP 
+\fIp_cs_precedes\fP
+\fIcurrency_symbol\fP または \fIint_curr_symbol\fP をフォーマットした金額の前に付ける場合には \fB1\fP
+を、後ろに付ける場合には \fB0\fP を指定する。
+.TP 
+\fIp_sep_by_space\fP
+以下の整数のいずれかを指定する。
+.RS
+.TP 
+\fB0\fP
+記号と数値の間に空白を入れない。
+.TP 
+\fB1\fP
+記号と数値の間に空白を入れる。
+.TP 
+\fB2\fP
+記号と数値が隣接していれば間に空白を入れる。
+.RE
+.TP 
+\fIn_cs_precedes\fP
+.RS
+.TP 
+\fB0\fP
+\- 記号は数値の後におく。
+.TP 
+\fB1\fP
+\- 記号は数値の前におく。
+.RE
+.TP 
+\fIn_sep_by_space\fP
+以下の整数のいずれかを指定する。 \fB0\fP は \fIcurrency_symbol\fP または \fIint_curr_symbol\fP
+と負の金額との間に空白を入れないことを、 \fB1\fP は負の数値と記号の間に空白を入れることを、 \fB2\fP
+は隣接していた場合にのみ空白を入れることを意味する。
+.TP 
+\fIp_sign_posn\fP
+.RS
+.TP 
+\fB0\fP
+値と \fIcurrency_symbol\fP または \fIint_curr_symbol\fP を括弧で括る。
+.TP 
+\fB1\fP
+符号を値と \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の前に置く。
+.TP 
+\fB2\fP
+符号を値と \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の後に置く。
+.TP 
+\fB3\fP
+符号を \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の前に置く。
+.TP 
+\fB4\fP
+符号を \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の後に置く。
+.RE
+.TP 
+\fIn_sign_posn\fP
+.RS
+.TP 
+\fB0\fP
+値と \fIcurrency_symbol\fP または \fIint_curr_symbol\fP を括弧で括る。
+.TP 
+\fB1\fP
+符号を値と \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の前に置く。
+.TP 
+\fB2\fP
+符号を値と \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の後に置く。
+.TP 
+\fB3\fP
+符号を \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の前に置く。
+.TP 
+\fB4\fP
+符号を \fIcurrency_symbol\fP または \fIint_curr_symbol\fP の後に置く。
+.RE
+.PP
+\fBLC_MONETARY\fP の定義は \fIEND LC_MONETARY\fP という文字列で終了する。
+.SS LC_NUMERIC
+このカテゴリの定義は最初のカラムに \fBLC_NUMERIC\fP という文字列を置くことで始める。
+
+ここでは以下のキーワードが使用できる:
+.TP 
+\fIdecimal_point\fP
+数値をフォーマットする際に小数点に使用する文字列を指定する。
+.TP 
+\fIthousands_sep\fP
+数値をフォーマットする際に桁の区切りに使用する文字列を指定する。
+.TP 
+\fIgrouping\fP
+数字をフォーマットする際に何桁ごとに区切るかを指定する。
+.PP
+The \fBLC_NUMERIC\fP の定義は \fIEND LC_NUMERIC\fP という文字列で終了する。
+.SS LC_TIME
+このカテゴリの定義は最初のカラムに \fBLC_TIME\fP という文字列を置くことで始める。
+
+ここでは以下のキーワードが使用できる:
+.TP 
+\fIabday\fP
+曜日の名前の省略形のリストを指定する。 リストは \fIweek\fP で指定された週の開始曜日 (デフォルトでは日曜日) から始める。
+.TP 
+\fIday\fP
+曜日の名前のリストを指定する。 リストは \fIweek\fP で指定された週の開始曜日 (デフォルトでは日曜日) から始める。
+.TP 
+\fIabmon\fP
+月の名前の省略形のリストを指定する。
+.TP 
+\fImon\fP
+月の名前のリストを指定する。
+.TP 
+\fIam_pm\fP
+それぞれ \fB午前 (am)\fP と \fB午後 (pm)\fP に対応する文字列を指定する。
+.TP 
+\fId_t_fmt\fP
+適切な日付け (date) と時刻 (time) のフォーマットを指定する。
+.TP 
+\fId_fmt\fP
+適切な日付け (date) のフォーマットを指定する。
+.TP 
+\fIt_fmt\fP
+適切な時刻 (time) のフォーマットを指定する。
+.TP 
+\fIt_fmt_ampm\fP
+12 時間方式を使用した時刻のフォーマットを指定する。
+.TP 
+\fIweek\fP
+3 つの値からなるリストを指定する。 リストは、一週間の日数 (デフォルトでは 7)、 週の開始曜日 (デフォルトでは日曜に対応)、
+一年の最初の週の最小の長さ (デフォルトでは 4) から構成される。 週の開始曜日については、週の開始日が日曜日の場合には \fB19971130\fP
+を、月曜日の場合には \fB19971201\fP を使用する。したがって、 \fIday\fP リストの最初の日として、 \fB19971130\fP
+を使う国ではその地域の日曜日の名前を、 \fB19971201\fP を使う国ではその地域の月曜日の名前を設定すべきである。
+.TP 
+\fIfirst_weekday\fP (glibc 2.2 以降)
+カレンダーアプリケーションで最初に表示する曜日の \fIday\fP リストにおける番号。 デフォルト値の 1 は日曜日か月曜日に対応する。
+どちらに対応するかは \fIweek\fP リストの二番目の項目の値で決まる。
+.TP 
+\fIfirst_workday\fP (glibc 2.2 以降)
+最初の就業日を示す \fIday\fP リストにおける曜日の番号。
+.PP
+\fBLC_TIME\fP の定義は \fIEND LC_TIME\fP という文字列で終了する。
+.SS LC_MESSAGES
+このカテゴリの定義は最初のカラムに \fBLC_MESSAGES\fP という文字列を置くことで始める。
+
+ここでは以下のキーワードが使用できる:
+.TP 
+\fIyesexpr\fP
+「はい (yes)」を意味する正規表現を指定する。
+.TP 
+\fInoexpr\fP
+「いいえ (no)」を意味する正規表現を指定する。
+.PP
+\fBLC_MESSAGES\fP の定義は \fIEND LC_MESSAGES\fP という文字列で終了する。
+
+より詳しくは POSIX.2 規格を参照のこと。
+.SH ファイル
+/usr/lib/locale/ \(em 現在のロケール設定のデータベース
+.br
+/usr/lib/nls/charmap/* \(em 文字定義ファイル
+.SH 準拠
+POSIX.2, ISO/IEC 14652.
+.SH バグ
+.\" .SH AUTHOR
+.\" Jochen Hein (Hein@Student.TU-Clausthal.de)
+このマニュアルは完全ではない。
+.SH 関連項目
+\fBlocale\fP(1), \fBlocaledef\fP(1)  \fBlocaleconv\fP(3), \fBsetlocale\fP(3),
+\fBcharmap\fP(5),
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man5/services.5 b/draft/man5/services.5
new file mode 100644 (file)
index 0000000..55bbaf7
--- /dev/null
@@ -0,0 +1,160 @@
+.\" This manpage is Copyright (C) 1996 Austin Donnelly <and1000@cam.ac.uk>,
+.\" with additional material Copyright (c) 1995 Martin Schulze
+.\"     <joey@infodrom.north.de>
+.\"
+.\" %%%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
+.\"
+.\"   This manpage was made by merging two independently written manpages,
+.\"   one written by Martin Schulze (18 Oct 95), the other written by
+.\"   Austin Donnelly, (9 Jan 96).
+.\"
+.\" Thu Jan 11 12:14:41 1996 Austin Donnelly  <and1000@cam.ac.uk>
+.\"   * Merged two services(5) manpages
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH SERVICES 5 2010\-05\-22 Linux "Linux Programmer's Manual"
+.SH 名前
+services \- インターネット ネットワークサービス リスト
+.SH 説明
+\fBservices\fP は、人が分かりやすい形のインターネットサービスの名前と、 それらのサービスに割り当てられたポート番号や
+プロトコル種別の対応関係が書かれているテキストファイルである。 ネットワーク上で動作するプログラムはすべて、 そのサービスに対応するポート番号
+(とプロトコル) を得るために、 このファイルを調べる必要がある。 C ライブラリ関数である \fBgetservent\fP(3),
+\fBgetservbyname\fP(3), \fBgetservbyport\fP(3), \fBsetservent\fP(3), \fBendservent\fP(3)
+を利用することで、プログラムはこのファイルを調べることができる。
+
+ポート番号は、IANA (Internet Assigned Numbers Authority) によって
+割り当てられており、現在はポート番号を割り当てる際に TCP と UDP の両方のプロトコルを割り当てることになっている。
+そのため、ほとんどのサービスに対して、 たとえ TCP だけのサービスの場合であっても、対応する項目が二つあることになる。
+
+1024 より小さいポート番号 (いわゆる "low numbered" ポート) は 管理者 (root) 権限によってのみ使用することができる
+(\fBbind\fP(2), \fBtcp\fP(7), \fBudp\fP(7)  参照)。 これは、これらのポートに接続するクライアントに対して、
+そのポートで動いているサービスが標準的な実装であり、 その計算機のユーザーが動かしている 不正なサービスではないことを保証するためである。 IANA
+に明記されているよく使用されるポート番号は、 通常このような管理者だけが使用できる範囲に配置される。
+
+\fBservices\fP ファイルにあるサービスに対する項目があっても、必ずしもそのサービスが現
+在その計算機で動いている訳ではない。利用可能なインターネットサービスの設定に ついては \fBinetd.conf\fP(5)
+に記述されている。ただし、すべてのサービスが \fBinetd\fP(8)  によって起動されるわけではないので、 \fBinetd.conf\fP(5)
+には書かれていないサービスもあることに注意する必要がある。 特に、ネットニュース (NNTP) や メール (SMTP) のサーバーは、システム起動時の
+スクリプトから起動されることが多い。
+
+\fBservices\fP ファイルの場所は、 \fI<netdb.h>\fP 中の \fB_PATH_SERVICES\fP によって定義されている。
+この値は通常 \fI/etc/services\fP に設定されている。
+
+1 行につき 1 サービスが記述されており、以下の形式である。
+.IP
+\fIservice\-name\ \ \ port\fP\fB/\fP\fIprotocol\ \ \ \fP[\fIaliases ...\fP]
+.TP 
+各項目は以下の通り。
+.TP  10
+\fIservice\-name\fP
+サービスを表す分かりやすい名前であり、検索の際にも使用される。 大文字と小文字は区別される。 クライアントプログラムは \fIservice\-name\fP
+にちなんで名付けられることが多い。
+.TP 
+\fIport\fP
+サービスに対して使用されるポート番号。10 進数で指定する。
+.TP 
+\fIprotocol\fP
+使用されるプロトコルの種類。この欄は、 \fBprotocols\fP(5)  ファイルの中の項目と一致している必要がある。 通常使用される値は、
+\fBtcp\fP と \fBudp\fP である。
+.TP 
+\fIaliases\fP
+サービスに対する別名のリスト (区切はスペースまたはタブ) で、この欄は 必要にならば書くことができる。 また、別名は大文字と小文字は区別される。
+.PP
+それぞれの欄の区切りには、スペースまたはタブが使用される。
+
+コメントはシャープ (#) で始まり、その行の終わりまでがコメントとみなされる。 空行は飛ばされる。
+
+行の始めのスペースは無視されないので、 \fIservice\-name\fP は、行頭から書かなければならない。 \fIservice\-names\fP
+は、スペースとタブ以外の印字可能な文字なら何でもよいが、しかしながら 互換性の問題を少なくするような文字を選択すべきである。 例えば、a\-z 、0\-9
+、ハイフォン (\-) を使用するのが無難と思われる。
+
+指定された形式に合わない行はあってはならない (現在は、そのような行は \fBgetservent\fP(3), \fBgetservbyname\fP(3),
+\fBgetservbyport\fP(3)  によって無視される。しかし、その場合の挙動は信頼できない)。
+
+.\" The following is not true as at glibc 2.8 (a line with a comma is
+.\" ignored by getservent()); it's not clear if/when it was ever true.
+.\"   As a backward compatibility feature, the slash (/) between the
+.\"   .I port
+.\"   number and
+.\"   .I protocol
+.\"   name can in fact be either a slash or a comma (,).
+.\"   Use of the comma in
+.\"   modern installations is deprecated.
+.\"
+このファイルは Yellow Pages/NIS や BIND/Hesiod
+のようなネットワーク上の名前サービスを用いて、ネットワークを通じて配布される可能性もある。
+
+\fBservices\fP ファイルの見本を以下に示す。
+.RS
+.nf
+.sp
+.ta 3i
+netstat         15/tcp
+qotd            17/tcp          quote
+msp             18/tcp          # message send protocol
+msp             18/udp          # message send protocol
+chargen         19/tcp          ttytst source
+chargen         19/udp          ttytst source
+ftp             21/tcp
+# 22 \- unassigned
+telnet          23/tcp
+.fi
+.RE
+.SH ファイル
+.TP 
+\fI/etc/services\fP
+インターネット ネットワークサービスのリスト
+.TP 
+\fI<netdb.h>\fP
+.\" .SH BUGS
+.\" It's not clear when/if the following was ever true;
+.\" it isn't true for glibc 2.8:
+.\"    There is a maximum of 35 aliases, due to the way the
+.\"    .BR getservent (3)
+.\"    code is written.
+.\"
+.\" It's not clear when/if the following was ever true;
+.\" it isn't true for glibc 2.8:
+.\"    Lines longer than
+.\"    .B BUFSIZ
+.\"    (currently 1024) characters will be ignored by
+.\"    .BR getservent (3),
+.\"    .BR getservbyname (3),
+.\"    and
+.\"    .BR getservbyport (3).
+.\"    However, this will also cause the next line to be mis-parsed.
+\fB_PATH_SERVICES\fP の定義
+.SH 関連項目
+\fBlisten\fP(2), \fBendservent\fP(3), \fBgetservbyname\fP(3), \fBgetservbyport\fP(3),
+\fBgetservent\fP(3), \fBsetservent\fP(3), \fBinetd.conf\fP(5), \fBprotocols\fP(5),
+\fBinetd\fP(8)
+
+ポート番号の割り当てを定めている RFC (最新版は RFC\ 1700、別名 STD0002)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man5/slabinfo.5 b/draft/man5/slabinfo.5
new file mode 100644 (file)
index 0000000..16f3f01
--- /dev/null
@@ -0,0 +1,111 @@
+.\" Copyright (c) 2001 Andreas Dilger (adilger@turbolinux.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
+.\"
+.\" FIXME Over time, the slabinfo format has gone through
+.\" version changes. These should be documented:
+.\"
+.\"     slabinfo 1.0 - Linux 2.2 (precisely: 2.1.23)
+.\"     slabinfo 1.1 - Linux 2.4 (precisely: 2.4.0-test3)
+.\"     slabinfo 1.2 - Linux 2.5.45
+.\"     slabinfo 2.0 - Linux 2.6 (precisely: 2.5.71)
+.\"     slabinfo 2.1 - Linux 2.6.10
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH SLABINFO 5 2007\-09\-30 "" "Linux Programmer's Manual"
+.SH 名前
+/proc/slabinfo \- カーネル slab アロケータの統計
+.SH 書式
+\fBcat /proc/slabinfo\fP
+.SH 説明
+Linux カーネルの内部で良く利用されるオブジェクト (バッファヘッド、i\-ノード、ディレクトリ・エントリなど)
+は、それぞれ自分用のキャッシュを備えている。ファイル \fI/proc/slabinfo\fP はこれらの統計を与える。例を示す。
+.LP
+.in +4n
+.nf
+% cat /proc/slabinfo
+slabinfo \- version: 1.1
+kmem_cache            60     78    100    2    2    1
+blkdev_requests     5120   5120     96  128  128    1
+mnt_cache             20     40     96    1    1    1
+inode_cache         7005  14792    480 1598 1849    1
+dentry_cache        5469   5880    128  183  196    1
+filp                 726    760     96   19   19    1
+buffer_head        67131  71240     96 1776 1781    1
+vm_area_struct      1204   1652     64   23   28    1
+\&...
+size\-8192              1     17   8192    1   17    2
+size\-4096             41     73   4096   41   73    1
+\&...
+.fi
+.in
+.LP
+それぞれの slab キャッシュごとに、キャッシュの名前、 現在アクティブなオブジェクトの数、利用可能なオブジェクトの総数、 各オブジェクトのサイズ
+(バイト単位)、少なくとも一つのアクティブな オブジェクトを有するページの数、アロケートされたページの総数、 slab
+あたりのページ数、が与えられている。
+
+なお、 オブジェクトのアラインメントと slab キャッシュのオーバーヘッドとにより、 オブジェクトは通常ページの内部にきっちりとは収められていない。
+利用中のオブジェクトをひとつでも保持しているページは、 利用中であるとみなされ、解放できない。
+
+slab キャッシュ統計の機能を有効にしてコンパイルされたカーネルでは、 出力の最初の行に "(statistics)" と表示され、 5
+つのカラムが追加される。 それぞれ、アクティブなオブジェクトの瞬間最大値、 オブジェクトがアロケートされた回数、 キャッシュの大きさが拡張された
+(新しいページがこのキャッシュに追加された) 回数、 キャッシュの大きさが縮小された (使っていないページがこのキャッシュから削除された) 回数、
+新たなページをこのキャッシュにアロケートする際に起きたエラーの回数、である。 slab
+キャッシュ統計が使えないカーネルでは、これらのカラムは表示されない。
+
+SMP システムでは、出力の最初の行に "(SMP)" と表示され、 各 slab ごとに 2 つのカラムが追加される。 これらは各 CPU
+が持つローカルなキャッシュ (per\-CPU キャッシュ) の slab アロケーションポリシーを表示する (per\-CPU キャッシュは、
+オブジェクトをキャッシュからアロケートする際に CPU 間での同期を減少させるために設けられている)。 最初のカラムは per\-CPU 制限、
+すなわち各 CPU ごとにキャッシュできるオブジェクトの最大数である。 二番目のカラムはバッチカウント、 すなわち per\-CPU
+キャッシュが空だったり一杯だったりした場合に、 グローバルなキャッシュと受け渡しできるフリーなオブジェクトの最大数である。
+
+slab キャッシュ統計と SMP が両方有効になっている場合は、 per\-CPU キャッシュの統計を表示する 4 つのカラムがさらに追加される。
+最初の 2 つは per\-CPU キャッシュの アロケーションヒットカウントとアロケーションミスカウントである。
+すなわち、あるオブジェクトをアロケートしたときに、 それが per\-CPU キャッシュの内部に あった/なかった 回数である。 続く 2
+つは、per\-CPU キャッシュのフリーヒットカウントとミスカウントである。
+すなわち解放されたオブジェクトをグローバルなキャッシュにフラッシュする前に、 per\-CPU キャッシュの制限の範囲に 収まった/収まらなかった
+回数である。
+
+SMP において per\-CPU slab キャッシュの制限値や バッチカウントを変更するには、以下のようにすればよい:
+
+.in +4n
+.nf
+echo "\fIcache_name limit batchcount\fP" > /proc/slabinfo
+.fi
+.in
+.SH ファイル
+\fI<linux/slab.h>\fP
+.SH バージョン
+\fI/proc/slabinfo\fP は Linux 2.1.23 以降に存在する。 SMP における CPU ごとのキャッシュは Linux
+2.4.0\-test3 以降に存在する。
+.SH 注意
+Linux 2.6.16 以降では、 \fI/proc/slabinfo\fP ファイルは、カーネル設定オプション \fBCONFIG_SLAB\fP
+を有効にした場合のみ存在する。
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man7/futex.7 b/draft/man7/futex.7
new file mode 100644 (file)
index 0000000..ab2b164
--- /dev/null
@@ -0,0 +1,90 @@
+.\" This manpage has been automatically generated by docbook2man
+.\" from a DocBook document.  This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+.\" Please send any bug reports, improvements, comments, patches,
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.\"
+.\" %%%LICENSE_START(MIT)
+.\" This page is made available under the MIT license.
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUTEX 7 2012\-08\-05 Linux "Linux Programmer's Manual"
+.SH 名前
+futex \- 高速ユーザ空間ロック機構
+.SH 書式
+.nf
+\fB#include <linux/futex.h>\fP
+.fi
+.SH 説明
+.PP
+Linux カーネルは、ユーザ空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space
+mutexes"; 高速ユーザ空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex
+のような高度なロック機構の概念を構築するのに役立っている。
+.PP
+このページはすべての設計決定を記述するようにはなっておらず、 アプリケーションやライブラリの開発に関係することがらに限っている。
+実際にはプログラマの多くは直接は futex を扱わないが、その代わり futex に基づいて構築されたシステムライブラリ (例えば NPTL
+スレッド) に 依存することになるだろう。
+.PP
+futex は異なるプロセス間で共有することのできるメモリ片で識別される。 これらの異なるプロセスでは、同じアドレスが付与されている必要はない。
+裸の姿では futex のセマンティクスはセマフォと同じである。 futex は不可分操作で (atomically)
+インクリメントしたりデクリメントしたりできる カウンタで、プロセスは値が正になるのを待つことができる。
+.PP
+futex の操作は、競合がない場合には完全にユーザ空間で行なわれる。 カーネルは競合が起こった場合の仲裁に関与するだけである。
+良識ある設計では競合が起こらないよう努力するが、 futex も競合状態に関して最適化されている。
+.PP
+裸の姿では、 futex は不可分なアセンブリ命令でのみ操作される アラインメントの揃った int 型の変数である。 複数のプロセスはこの int
+型変数を、 \fBmmap\fP(2)  を用いるか、 共有メモリセグメントを介するか、 メモリ空間を共有する (この場合、
+アプリケーションは一般的にマルチ・スレッドであると呼ばれる) か方法で共有する。
+.SS セマンティクス
+.PP
+futex の操作はすべてユーザ空間から始まるが、必要に応じて \fBfutex\fP(2)  システムコールを用いてカーネルと通信する。
+.PP
+futex を "up" するには、 ホスト CPU に対し int 型変数を不可分操作でインクリメントするような、 適切なアセンブリ命令を実行する。
+そのあと、実際に 0 から 1 に変化したかどうかをチェックし、 変化していれば待ちプロセス (waiter) はないということであり、操作は完了する。
+これは競合のない場合であり、高速でよく起こるはずである。
+.PP
+競合がある場合、不可分操作のインクリメントでカウンタは \-1 (または他の負の数)
+から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザ空間ではカウンタを 1 に設定し、 \fBFUTEX_WAKE\fP
+を用いてカーネルに待ちプロセスを wake (起床) させるよう指示する。
+.PP
+futex の獲得を待つ、すなわち futex を "down" するには反対の操作を行なう。 不可分操作でカウンタをデクリメントし、カウンタが 0
+に変化したかどうかを チェックする。変化していれば操作は完了し futex は競合していないということである。 0
+にならなかった場合、プロセスはカウンタを \-1 に設定し、 他のプロセスがその futex を up するのを待つようカーネルに要求しなければならない。
+これは \fBFUTEX_WAIT\fP を行なうことで実現される。
+.PP
+\fBfutex\fP(2)  システムコールには、省略可能な引数としてタイムアウトを渡すことができ、 カーネルはその futex が up
+されるのをどれくらいの期間待つべきかを 指定することができる。この場合、セマンティクスはもっと複雑になるため、 より詳細な情報を得るにはプログラマは
+\fBfutex\fP(2)  を参照すること。 同じページに非同期の futex 待ちについても記されている。
+.SH バージョン
+.PP
+最初の futex 対応は Linux 2.5.7 で組み込まれたが、 上記のセマンティクスとは異なる。 現在のセマンティクスは Linux
+2.5.40 以降で利用可能である。
+.SH 注意
+.PP
+再び繰り返しておくが、裸の futex はエンドユーザが容易に使える概念として 意図されたものではない。
+実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザ空間ライブラリの ソースを読み終えていることが要求される。
+.PP
+.\" .SH "AUTHORS"
+.\" .PP
+.\" Futexes were designed and worked on by Hubertus Franke
+.\" (IBM Thomas J. Watson Research Center),
+.\" Matthew Kirkwood, Ingo Molnar (Red Hat) and
+.\" Rusty Russell (IBM Linux Technology Center).
+.\" This page written by bert hubert.
+このマニュアルページには \fBfutex\fP(2)  プリミティブの最も一般的な使用法が 記されている。これは決して唯一の使用法ではない。
+.SH 関連項目
+\fBfutex\fP(2)
+
+\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP (proceedings
+of the Ottawa Linux Symposium 2002), futex の使用例ライブラリ, futex\-*.tar.bz2
+.UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
+.UE .
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man7/hier.7 b/draft/man7/hier.7
new file mode 100644 (file)
index 0000000..cf9c3da
--- /dev/null
@@ -0,0 +1,388 @@
+.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
+.\"
+.\" %%%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
+.\"
+.\" Modified Sun Jul 25 11:05:58 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sat Feb 10 16:18:03 1996 by Urs Thuermann (urs@isnogud.escape.de)
+.\" Modified Mon Jun 16 20:02:00 1997 by Nicolás Lichtmaier <nick@debian.org>
+.\" Modified Mon Feb  6 16:41:00 1999 by Nicolás Lichtmaier <nick@debian.org>
+.\" Modified Tue Feb  8 16:46:45 2000 by Chris Pepper <pepper@tgg.com>
+.\" Modified Fri Sep  7 20:32:45 2001 by Tammy Fox <tfox@redhat.com>
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH HIER 7 2012\-08\-05 Linux "Linux Programmer's Manual"
+.SH 名前
+hier \- ファイルシステム階層の説明
+.SH 説明
+典型的な Linux system には以下のようなディレクトリがある (他にもたくさんのディレクトリがあるが):
+.TP 
+\fI/\fP
+ルートディレクトリ。ここが階層の起点となる。
+.TP 
+\fI/bin\fP
+このディレクトリには、シングルユーザーモードで システムの起動や修理を行う際に必要な実行形式ファイルが含まれる。
+.TP 
+\fI/boot\fP
+ブートローダが用いる静的なファイルが含まれている。 このディレクトリにはブートプロセスの間に必要なファイルだけが置かれる。
+マップインストーラや設定ファイルは \fI/sbin\fP や \fI/etc\fP に置くべきである。
+.TP 
+\fI/dev\fP
+物理デバイスを参照している スペシャルファイルやデバイスファイルの置き場所。 \fBmknod\fP(1)  を参照のこと。
+.TP 
+\fI/etc\fP
+マシン固有の設定ファイルが置かれる場所。X11 のような 大規模なソフトウェアパッケージでは、 \fI/etc\fP
+以下に更にパッケージ単位でサブディレクトリが作られることもある。 サイト全体に有効な設定ファイルは、ここではなく \fI/usr/etc\fP
+に置かれることもある。 しかし、プログラムからのこれらのファイルの参照先は、常に \fI/etc\fP にすべきである。 \fI/usr/etc\fP
+以下のファイルに対しては、それらへのリンクを \fI/etc\fP に置けばよい。
+.TP 
+\fI/etc/opt\fP
+\fI/opt\fP にインストールされたアドオンアプリケーションが使う、 ホスト固有の設定ファイルの置き場所。
+.TP 
+\fI/etc/sgml\fP
+SGML や XML の設定ファイルの置き場所 (なくてもよい)。
+.TP 
+\fI/etc/skel\fP
+新たにユーザーアカウントを作る際、 通常このディレクトリにあるファイルが ユーザーのホームディレクトリにコピーされる。
+.TP 
+\fI/etc/X11\fP
+X11 window system の設定ファイルの置き場所 (なくてもよい)。
+.TP 
+\fI/home\fP
+通常、ユーザーのホームディレクトリが、 このディレクトリ直下ないしサブディレクトリの下に作成される。 このディレクトリの構成をどうするかは、
+ローカルマシンの管理者が決めることである。
+.TP 
+\fI/lib\fP
+このディレクトリには、システムの起動時に必要な共有ライブラリや、 ルートファイルシステムでコマンドを実行するのに必要な共有ライブラリを置く。
+.TP 
+\fI/media\fP
+このディレクトリには、 CD/DVD ディスクや USB スティックなどの取り外し可能メディア (removable media)
+用のマウントポイントが置かれる。
+.TP 
+\fI/mnt\fP
+このディレクトリは、一時的にマウントするファイルシステム用の マウントポイントである。
+ディストリビューションによっては、一時的にマウントするファイルシステム用の マウントポイントとして、 \fI/mnt\fP
+内にサブディレクトリが用意されている場合がある。
+.TP 
+\fI/opt\fP
+このディレクトリにはアドオンパッケージの静的なファイルが置かれる。
+.TP 
+\fI/proc\fP
+このディレクトリは \fIproc\fP ファイルシステムのマウントポイントである。 \fIproc\fP
+ファイルシステムは、実行中プロセスやカーネルの情報を提供する。 この疑似ファイルシステムの詳細は、 \fBproc\fP(5)  で説明されている。
+.TP 
+\fI/root\fP
+通常ここが root ユーザのホームディレクトリになる (なくてもよい)。
+.TP 
+\fI/sbin\fP
+\fI/bin\fP と同様に、 このディレクトリにはシステムの起動に必要なコマンドが含まれる。
+ただしここには、一般ユーザーは通常実行しないコマンドが置かれる。
+.TP 
+\fI/srv\fP
+このディレクトリには、このシステムで提供される サイト固有のデータが置かれる。
+.TP 
+\fI/tmp\fP
+このディレクトリには、 定期的なジョブによって、またはシステム起動時に、 無条件に削除して構わない一時的なファイルが置かれる。
+.TP 
+\fI/usr\fP
+通常このディレクトリは、独立したパーティションがマウントされる。 ここには、共有可能で読み込み専用のものだけが含まれ、 よっていろいろな Linux
+マシンからマウントできる。
+.TP 
+\fI/usr/X11R6\fP
+X Window System, Version 11 release 6 (なくてもよい)。
+.TP 
+\fI/usr/X11R6/bin\fP
+X Window System のバイナリの置き場所。 古いディレクトリである \fI/usr/bin/X11\fP
+からここにシンボリックリンクが張られていることが多い。
+.TP 
+\fI/usr/X11R6/lib\fP
+X Window System に関連するデータファイルの置き場所。
+.TP 
+\fI/usr/X11R6/lib/X11\fP
+ここには X の動作に必要な種々のファイルが含まれている。 \fI/usr/lib/X11\fP からここにシンボリックリンクが張られていることが多い。
+.TP 
+\fI/usr/X11R6/include/X11\fP
+ここには X11 Window System を使ったプログラムをコンパイルするために 必要なインクルードファイルが含まれている。
+\fI/usr/include/X11\fP からここにシンボリックリンクが張られていることが多い。
+.TP 
+\fI/usr/bin\fP
+このディレクトリは、実行形式ファイルの主な置き場所である。 システムのブートやシステム復旧には必要とされない、 一般ユーザーが利用するコマンドの多くは、
+ローカルにインストールされるのでない限り、 このディレクトリに置くべきである。
+.TP 
+\fI/usr/bin/X11\fP
+X11 コマンドの伝統的な置き場所。Linux では、通常 \fI/usr/X11R6/bin\fP にシンボリックリンクが張られている。
+.TP 
+\fI/usr/dict\fP
+\fI/usr/share/dict\fP に置き換えられた。
+.TP 
+\fI/usr/doc\fP
+\fI/usr/share/doc\fP に置き換えられた。
+.TP 
+\fI/usr/etc\fP
+サイト内部の複数のマシンが共有するような設定ファイルが置かれる。 しかしながら、コマンドはそれらのファイルの参照先を、常に \fI/etc\fP
+にすべきだろう。 \fI/etc\fP のファイルからリンクを張って、 \fI/usr/etc\fP の適切なファイルを指すようにすべきである。
+.TP 
+\fI/usr/games\fP
+ゲームプログラムや教育用プログラムのバイナリが含まれている (なくてもよい)。
+.TP 
+\fI/usr/include\fP
+C コンパイラ用のインクルードファイルが含まれている。
+.TP 
+\fI/usr/include/X11\fP
+C コンパイラと X Window System 用のインクルードファイルが含まれている。 通常これは \fI/usr/inlcude/X11\fP
+へのシンボリックリンクになっている。
+.TP 
+\fI/usr/include/asm\fP
+アセンブラ関数の宣言を行うインクルードファイルが含まれている。 このディレクトリは、以前は \fI/usr/src/linux/include/asm\fP
+へのシンボリックリンクだった。
+.TP 
+\fI/usr/include/linux\fP
+ここには、システムのリリースのたびごとに変更されうる情報が含まれる。 ここは以前は \fI/usr/src/linux/include/linux\fP
+にシンボリックリンクされており、 オペレーティングシステム固有の情報が得られるようになっていた。
+
+(ここに置くインクルードファイルは、 現在の libc およびユーザ空間で正しく動作するものでなければならない。 しかし Linux のカーネルソースは
+ユーザプログラムといっしょに使うようには設計されていないし、 あなたが使っている libc も関知しない。 \fI/usr/include/asm\fP と
+\fI/usr/include/linux\fP を適当なカーネルツリーへのリンクにしたりすると、破綻するのは目に見えている。 Debian
+ではこうせずに、libc*\-dev package が提供する、 安定したカーネルバージョンのヘッダファイルを置いている。)
+.TP 
+\fI/usr/include/g++\fP
+GNU C++ コンパイラ用のインクルードファイルが含まれている。
+.TP 
+\fI/usr/lib\fP
+オブジェクトライブラリ (ダイナミックライブラリも含む) と、 直接には起動されないような実行形式ファイル少々とが置かれる。
+複雑なプログラムでは、更にサブディレクトリがあるかもしれない。
+.TP 
+\fI/usr/lib/X11\fP
+X のプログラムに関連するデータファイルと、 X Window System の設定ファイルの置き場所。 Linux では通常
+\fI/usr/X11R6/lib/X11\fP にシンボリックリンクが張られている。
+.TP 
+\fI/usr/lib/gcc\-lib\fP
+GNU C コンパイラ \fBgcc\fP(1)  用の実行形式ファイルとインクルードファイルが含まれている。
+.TP 
+\fI/usr/lib/groff\fP
+GNU groff 文書整形システムのためのファイルが含まれている。
+.TP 
+\fI/usr/lib/uucp\fP
+\fBuucp\fP(1)  のためのファイルが含まれている。
+.TP 
+\fI/usr/local\fP
+このディレクトリは、 サイトローカルなプログラムがインストールされる典型的な場所である。
+.TP 
+\fI/usr/local/bin\fP
+サイトローカルなプログラムが含まれている。
+.TP 
+\fI/usr/local/doc\fP
+サイトローカルなドキュメントが含まれている。
+.TP 
+\fI/usr/local/etc\fP
+サイトローカルにインストールされたプログラムの設定ファイルの置き場所。
+.TP 
+\fI/usr/local/games\fP
+サイトローカルにインストールされたゲームのバイナリの置き場所。
+.TP 
+\fI/usr/local/lib\fP
+サイトローカルにインストールされたプログラムの関連ファイルの置き場所。
+.TP 
+\fI/usr/local/include\fP
+ローカルな C コンパイラのヘッダファイルの置き場所。
+.TP 
+\fI/usr/local/info\fP
+サイトローカルにインストールされたプログラムの info ページの置き場所。
+.TP 
+\fI/usr/local/man\fP
+サイトローカルにインストールされたプログラムのマニュアルページの置き場所。
+.TP 
+\fI/usr/local/sbin\fP
+サイトローカルにインストールされたシステム管理コマンドの置き場所。
+.TP 
+\fI/usr/local/share\fP
+同じ OS ならアーキテクチャが異なっても共有できる、 ローカルなアプリケーションデータの置き場所。
+.TP 
+\fI/usr/local/src\fP
+サイトローカルにインストールされたソフトウェアのソースコードの置き場所。
+.TP 
+\fI/usr/man\fP
+\fI/usr/share/man\fP に置き換えられた。
+.TP 
+\fI/usr/sbin\fP
+このディレクトリには、システム管理コマンドが含まれる。 ここに置かれるコマンドは、ブートプロセスや \fI/usr\fP
+のマウント、システムの修理などに必要なものであってはならない。
+.TP 
+\fI/usr/share\fP
+このディレクトリには、アプリケーションごとに固有なデータ (同じ OS ならアーキテクチャが違っていても共有できるもの)
+がサブディレクトリ単位で置かれる。 以前には \fI/usr/doc\fP, \fI/usr/lib\fP, \fI/usr/man\fP
+などにあった内容が、多くここに置かれている。
+.TP 
+\fI/usr/share/dict\fP
+スペルチェッカ用の単語リストが含まれる。
+.TP 
+\fI/usr/share/doc\fP
+インストールされたプログラムのドキュメントの置き場所。
+.TP 
+\fI/usr/share/games\fP
+\fI/usr/games\fP に置かれたゲーム用の静的なデータファイルの置き場所。
+.TP 
+\fI/usr/share/info\fP
+info ページが置かれる。
+.TP 
+\fI/usr/share/locale\fP
+ロケール (locale) 情報が置かれる。
+.TP 
+\fI/usr/share/man\fP
+マニュアルページ。各ページはセクションに応じたサブディレクトリに置かれる。
+.TP 
+\fI/usr/share/man/<locale>/man[1\-9]\fP
+これらのディレクトリには、 各ロケールのマニュアルページのソースが置かれている。
+すべてのマニュアルページで同じ言語とコードセットを使用するシステムでは、 \fI<locale>\fP は省略されることがある。
+.TP 
+\fI/usr/share/misc\fP
+同じ OS ならアーキテクチャが違っていても共有できる、雑多なデータの置き場所。
+.TP 
+\fI/usr/share/nls\fP
+母国語サポート (native language support) 用のメッセージカタログの置き場所。
+.TP 
+\fI/usr/share/sgml\fP
+SGML や XML のファイルの置き場所。
+.TP 
+\fI/usr/share/terminfo\fP
+terminfo のデータベースが置かれる。
+.TP 
+\fI/usr/share/tmac\fP
+groff と一緒には配布されていない troff マクロの置き場所。
+.TP 
+\fI/usr/share/zoneinfo\fP
+タイムゾーン情報のファイルが置かれる。
+.TP 
+\fI/usr/src\fP
+システム上の色々なコンポーネントのソースファイル (参照用のパッケージも含む) の置き場所。 この場所で自分のプロジェクトの作業をしてはいけない。
+/usr 以下のファイルはソフトウェアのインストールの時以外は 読み込み専用になっているべきだからである。
+.TP 
+\fI/usr/src/linux\fP
+かつてはカーネルソースの伝統的な置き場所だった。 ディストリビューションによっては、 出荷時のデフォルトのカーネルのソースをここに置いている。
+自分でカーネルをビルドするときは別の場所を使うほうがいいだろう。
+.TP 
+\fI/usr/tmp\fP
+今では用いられなくなった。このディレクトリは \fI/var/tmp\fP へのリンクにすべきである。
+このリンクは互換性のためだけにあり、もはや使うべきでない。
+.TP 
+\fI/var\fP
+このディレクトリには、スプールファイルやログファイルのような、 サイズが変化するファイルが置かれる。
+.TP 
+\fI/var/adm\fP
+このディレクトリは \fI/var/log\fP に置き換えられた。 ここは \fI/var/log\fP へのシンボリックリンクにすべきである。
+.TP 
+\fI/var/backups\fP
+歴史的な理由からまだ残っている。
+.TP 
+\fI/var/cache\fP
+プログラムのためにキャッシュされたデータの置き場所。
+.TP 
+\fI/var/catman/cat[1\-9]\fP or \fI/var/cache/man/cat[1\-9]\fP
+これらのディレクトリには、整形済みのマニュアルページが、 ページのセクションに従って置かれている。
+(整形済みマニュアルページの利用は推奨されていない。)
+.TP 
+\fI/var/cron\fP
+歴史的な理由からまだ残っている。
+.TP 
+\fI/var/lib\fP
+プログラムの状態に関する情報のうち、可変なものの置き場所。
+.TP 
+\fI/var/local\fP
+\fI/usr/local\fP 用の可変データの置き場所。
+.TP 
+\fI/var/lock\fP
+ロックファイルの置き場所。 デバイスのロックファイルの命名は、慣習として \fILCK..<device>\fP とされている。ここで
+\fI<device>\fP はファイルシステム上でのデバイス名である。 利用されているフォーマットは HDU UUCP
+のロックファイルのものである。 すなわち各ロックファイルには アスキー 10 進数値文字で表記した PID 10 バイトと、
+それに続いて改行文字とが含まれている。
+.TP 
+\fI/var/log\fP
+種々のログファイルの置き場所。
+.TP 
+\fI/var/opt\fP
+\fI/opt\fP 用の可変データの置き場所。
+.TP 
+\fI/var/mail\fP
+ユーザのメールボックスの置き場所。 \fI/var/spool/mail\fP を置き換えた。
+.TP 
+\fI/var/msgs\fP
+歴史的な理由からまだ残っている。
+.TP 
+\fI/var/preserve\fP
+歴史的な理由からまだ残っている。
+.TP 
+\fI/var/run\fP
+実行時の可変ファイルが置かれる。 例えばプロセス識別子 (PID) を保持するファイルや、 ユーザのログイン情報ファイル \fI(utmp)\fP
+などである。 ここのファイルは、通常システム起動時に削除される。
+.TP 
+\fI/var/spool\fP
+色々なプログラムのスプールファイル (あるいはキューファイル) の置き場所。
+.TP 
+\fI/var/spool/at\fP
+\fBat\fP(1)  のジョブスプール。
+.TP 
+\fI/var/spool/cron\fP
+\fBcron\fP(8)  のジョブスプール。
+.TP 
+\fI/var/spool/lpd\fP
+印刷用のスプールファイルが置かれる。
+.TP 
+\fI/var/spool/mail\fP
+\fI/var/mail\fP に置き換えられた。
+.TP 
+\fI/var/spool/mqueue\fP
+キューイングされた送信メールの置き場所。
+.TP 
+\fI/var/spool/news\fP
+ニュースのスプールディレクトリ。
+.TP 
+\fI/var/spool/rwho\fP
+\fBrwhod\fP(8)  のスプールファイルの置き場所。
+.TP 
+\fI/var/spool/smail\fP
+メール配送プログラム \fBsmail\fP(1)  のスプールファイルの置き場所。
+.TP 
+\fI/var/spool/uucp\fP
+\fBuucp\fP(1)  のスプールファイルの置き場所。
+.TP 
+\fI/var/tmp\fP
+\fI/tmp\fP と似ているが、 このディレクトリに置かれる一時的なファイルは保存期間の制限がない。
+.TP 
+\fI/var/yp\fP
+NIS のデータベースファイルの置き場所。
+.SH 準拠
+The Filesystem Hierarchy Standard, Version 2.2
+.UR http://www.pathname.com\:/fhs/
+.UE .
+.SH バグ
+このリストは網羅的なものではない。 個々のシステムでは異なる部分があるかもしれない。
+.SH 関連項目
+\fBfind\fP(1), \fBln\fP(1), \fBproc\fP(5), \fBmount\fP(8)
+
+The Filesystem Hierarchy Standard
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man7/locale.7 b/draft/man7/locale.7
new file mode 100644 (file)
index 0000000..fa1f11e
--- /dev/null
@@ -0,0 +1,159 @@
+.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
+.\"
+.\" %%%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
+.\"
+.\" Modified Sat Jul 24 17:28:34 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Sun Jun 01 17:16:34 1997 by Jochen Hein
+.\"   <jochen.hein@delphi.central.de>
+.\" Modified Thu Apr 25 00:43:19 2002 by Bruno Haible <bruno@clisp.org>
+.\"
+.\" FIXME Document LOCPATH;
+.\" see http://sourceware.org/bugzilla/show_bug.cgi?id=174
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH LOCALE 7 2008\-12\-05 Linux "Linux Programmer's Manual"
+.SH 名前
+locale \- 多言語サポートの解説
+.SH 書式
+.nf
+\fB#include <locale.h>\fP
+.fi
+.SH 説明
+ロケール (locale) は言語や文化ルールの集合である。 これらは、メッセージ出力に使用する言語・いろいろな文字集合・
+表記に関する慣習といったような面をカバーしている。 プログラムをいろいろな文化に移植可能とするには、 そのプログラムは自分のロケールを決めて、
+それに応じた適切な動作ができなければならない。
+.PP
+ヘッダーファイル \fI<locale.h>\fP には、この目的に便利なデータ型・関数・マクロなどの宣言がある。
+.PP
+このヘッダーファイルで宣言されている関数には、 現在のロケールを設定する \fBsetlocale\fP(3)
+と、数値のフォーマット方法についての情報を取得する \fBlocaleconv\fP(3)  がある。
+.PP
+プログラムの必要に応じて、ローカル情報はいろいろなカテゴリに分かれており、 それらはマクロとして宣言されている。 これらのマクロを
+\fBsetlocale\fP(3)  関数の最初の引き数に用いると、 これらのどれかを望むロケールに設定できる。
+.TP 
+\fBLC_COLLATE\fP
+これは地域的なアルファベット文字列の比較に使用する \fBstrcoll\fP(3)  関数と \fBstrxfrm\fP(3)
+関数の動作を変更する。例えばドイツ語のエスツェット (鋭い s)  は、ソートの際 "ss" として扱われる。
+.TP 
+\fBLC_CTYPE\fP
+これは \fBisupper\fP(3)  や \fBtoupper\fP(3)  のような文字の判定・操作をする関数や、多バイト文字を扱う \fBmblen\fP(3)
+や \fBwctomb\fP(3)  のような関数の動作を変更する。
+.TP 
+\fBLC_MONETARY\fP
+\fBlocaleconv\fP(3)  によって返される情報を変更する。 これには小数点や区切りコンマの位置など、
+数字の表示方法に関する詳細が含まれている。この情報は \fBstrfmon\fP(3)  関数が内部で使用する。
+.TP 
+\fBLC_MESSAGES\fP
+メッセージ表示に使用する言語を変更する。 また肯定的・否定的な回答をどのように表示するかを変更する。 これらの情報を簡単に使用するために、 GNU C
+ライブラリには \fBgettext\fP(3), \fBngettext\fP(3), \fBrpmatch\fP(3)  関数が含まれている。 GNU gettext
+ファミリーに属する関数は、カテゴリが \fB"C"\fP 以外の有効なロケールに設定されている場合、環境変数 \fBLANGUAGE\fP にも従う
+(\fBLANGUAGE\fP はコロン区切りのロケールのリストである)。
+.TP 
+\fBLC_NUMERIC\fP
+\fBprintf\fP(3)  関数および \fBscanf\fP(3)  関数のファミリーでロケール設定を使うよう指示された場合に
+用いる情報を変更する。この情報は \fBlocaleconv\fP(3)  関数で取得することもできる。
+.TP 
+\fBLC_TIME\fP
+\fBstrftime\fP(3)  関数の動作を変更し、 地域で利用されている方法で現在時刻を表示する。 例えば、ヨーロッパの多くでは
+24時間式の時計を使うが、 アメリカでは 12時間式の時計を使う。
+.TP 
+\fBLC_ALL\fP
+.\" FIXME glibc 2.2.2 added new nonstandard locale categories:
+.\" LC_ADDRESS, LC_IDENTIFICATION, LC_MEASUREMENT, LC_NAME,
+.\" LC_PAPER, LC_TELEPHONE.  These need to be documented.
+上記の全て。
+.PP
+\fBsetlocale\fP(3)  の二番目の引き数が空文字列 \fB""\fP の場合、 デフォルトのロケールは以下の手順で決定する:
+.IP 1.
+環境変数 \fBLC_ALL\fP が設定されている場合には \fBLC_ALL\fP の値が使用される。
+.IP 2.
+上記のカテゴリのどれかと同じ名前の環境変数が設定されている場合には、 そのカテゴリにはその値が使用される。
+.IP 3.
+環境変数 \fBLANG\fP が設定されている場合には \fBLANG\fP の値が使用される。
+.PP
+地域的な数値フォーマットの情報は \fBlocaleconv\fP(3)  関数によって返される \fIstruct lconv\fP
+で得ることができ、これは以下のように宣言されている:
+.in +2n
+.nf
+
+struct lconv {
+
+    /* (通貨以外の) 数値情報 */
+
+    char *decimal_point;     /* 小数点の文字 */
+    char *thousands_sep;     /* 小数点の左側の数字のグループの
+                                区切り文字 */
+    char *grouping; /* それぞれの要素は各グループの数字の個数である。
+                       インデックス値が大きいほど、左側のグループを表す。
+                       要素の値が CHAR_MAX の場合は、最後のグループで
+                       あることを意味する。要素の値が 0 の場合は、
+                       その要素より左側の全ての要素に前の要素と同じ値を
+                       使用することを意味する。 */
+
+    /* 残りのフィールドは通貨情報用である */
+
+    char *int_curr_symbol;   /* 最初の三つの文字は ISO 4217 の通貨記号。
+                                四番目の文字は区切り文字。
+                                五番目は \(aq\0\(aq。 */
+    char *currency_symbol;   /* 地域の通貨記号 */
+    char *mon_decimal_point; /* 小数点の文字 */
+    char *mon_thousands_sep; /* 上記の `thousands_sep' と同様 */
+    char *mon_grouping;      /* 上記の `grouping' と同様 */
+    char *positive_sign;     /* 正の値の符号 */
+    char *negative_sign;     /* 負の値の符号 */
+    char  int_frac_digits;   /* 国際的な小数部の数字 */
+    char  frac_digits;       /* 地域の小数部の数字 */
+    char  p_cs_precedes;     /* 正の値の前に通貨記号を置く場合は 1,
+                                後ろに置く場合は 0 */
+    char  p_sep_by_space;    /* 正の値と通貨記号の間にスペースを
+                                入れる場合は 1 */
+    char  n_cs_precedes;     /* 負の値の前に通貨記号を置く場合は 1,
+                                後ろに置く場合は 0 */
+    char  n_sep_by_space;    /* 負の値と通貨記号の間にスペースを
+                                入れる場合は 1 */
+    /* 正と負の符号の位置:
+       0 値と通貨記号を括弧で囲む
+       1 符号は値と通貨記号の前に置く
+       2 符号は値と通貨記号の後に置く
+       3 符号は通貨記号の直後に置く
+       4 符号は通貨記号の直前に置く    */
+    char  p_sign_posn;
+    char  n_sign_posn;
+};
+.fi
+.in
+.SH 準拠
+POSIX.1\-2001.
+
+GNU gettext 関数ファミリーは LI18NUX2000 で規定されている。
+.SH 関連項目
+\fBlocale\fP(1), \fBlocaledef\fP(1), \fBgettext\fP(3), \fBlocaleconv\fP(3),
+\fBngettext\fP(3), \fBnl_langinfo\fP(3), \fBrpmatch\fP(3), \fBsetlocale\fP(3),
+\fBstrcoll\fP(3), \fBstrfmon\fP(3), \fBstrftime\fP(3), \fBstrxfrm\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man7/netlink.7 b/draft/man7/netlink.7
deleted file mode 100644 (file)
index 9abf9f9..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-.\" t
-.\" Don't change the first line, it tells man that tbl is needed.
-.\" This man page is Copyright (c) 1998 by Andi Kleen. Subject to the GPL.
-.\" Based on the original comments from Alexey Kuznetsov
-.\" Modified 2005-12-27 by Hasso Tepper <hasso@estpak.ee>
-.\" $Id: netlink.7,v 1.8 2000/06/22 13:23:00 ak Exp $
-.\"*******************************************************************
-.\"
-.\" This file was generated with po4a. Translate the source file.
-.\"
-.\"*******************************************************************
-.TH NETLINK 7 2012\-04\-14 Linux "Linux Programmer's Manual"
-.SH 名前
-netlink \- カーネルとユーザー空間の通信 (AF_NETLINK)
-.SH 書式
-.nf
-\fB#include <asm/types.h>\fP
-\fB#include <sys/socket.h>\fP
-\fB#include <linux/netlink.h>\fP
-
-\fBnetlink_socket = socket(AF_NETLINK, \fP\fIsocket_type\fP\fB, \fP\fInetlink_family\fP\fB);\fP
-.fi
-.SH 説明
-netlink はカーネルモジュールとユーザー空間のプロセス間で 情報をやりとりするために用いられる。 netlink は、ユーザープロセスに対しては
-標準的なソケットベースのインターフェースを、 カーネルモジュールにはカーネルの内部 API を提供する。 カーネル内部のインターフェースについてはこの
-man ページでは記述しない。 また、netlink キャラクタデバイスを用いた obsolete な netlink
-インターフェースもあるが、これもこの文書では解説しない。 これは単に過去互換性のために用意されているものにすぎない。
-
-netlink はデータグラム指向のサービスである。 \fIsocket_type\fP には \fBSOCK_RAW\fP と \fBSOCK_DGRAM\fP
-の両方とも指定可能である。 しかし netlink プロトコルはデータグラムと raw ソケットの区別をしない。
-
-\fInetlink_family\fP は、通信するカーネルモジュールや netlink グループの選択に用いる。 現在割り当てられている netlink
-ファミリーは以下の通り。
-.TP 
-\fBNETLINK_ROUTE\fP
-ルーティングとリンクの更新を受信する。 (IPv4 と IPv6 両方の) ルーティングテーブル・ IP アドレス・リンクパラメータ・近傍設定
-(neighbor setup)・ キューイングルール (queueing dicipline)・トラフィッククラス・
-パケットのクラス分類の修正に用いることができるだろう (\fBrtnetlink\fP(7)  を見よ)。
-.TP 
-\fBNETLINK_W1\fP
-単線 (1\-wire) のサブシステムからのメッセージ。
-.TP 
-\fBNETLINK_USERSOCK\fP
-ユーザーモードソケットプロトコルのために予約されている。
-.TP 
-\fBNETLINK_FIREWALL\fP
-IPv4 パケットを netfilter からユーザー空間へ転送する。 \fIip_queue\fP カーネルモジュールで使用される。
-.TP 
-\fBNETLINK_INET_DIAG\fP
-.\" FIXME More details on NETLINK_INET_DIAG needed.
-INET ソケットをモニタリングする。
-.TP 
-\fBNETLINK_NFLOG\fP
-Netfilter/iptables ULOG.
-.TP 
-\fBNETLINK_XFRM\fP
-.\" FIXME More details on NETLINK_XFRM needed.
-IPsec.
-.TP 
-\fBNETLINK_SELINUX\fP
-SELinux のイベント通知。
-.TP 
-\fBNETLINK_ISCSI\fP
-.\" FIXME More details on NETLINK_ISCSI needed.
-Open\-iSCSI.
-.TP 
-\fBNETLINK_AUDIT\fP
-.\" FIXME More details on NETLINK_AUDIT needed.
-監査 (audit) を行う。
-.TP 
-\fBNETLINK_FIB_LOOKUP\fP
-.\" FIXME More details on NETLINK_FIB_LOOKUP needed.
-ユーザー空間から FIB ルックアップにアクセスする。
-.TP 
-\fBNETLINK_CONNECTOR\fP
-カーネルコネクタ。 より詳しい情報はカーネルソースの \fIDocumentation/connector/*\fP を参照すること。
-.TP 
-\fBNETLINK_NETFILTER\fP
-.\" FIXME More details on NETLINK_NETFILTER needed.
-netfilter サブシステム。
-.TP 
-\fBNETLINK_IP6_FW\fP
-IPv6 パケットを netfilter からユーザー空間へ転送する。 \fIip6_queue\fP カーネルモジュールで使用される。
-.TP 
-\fBNETLINK_DNRTMSG\fP
-DECnet ルーティングメッセージ。
-.TP 
-\fBNETLINK_KOBJECT_UEVENT\fP
-.\" FIXME More details on NETLINK_KOBJECT_UEVENT needed.
-ユーザー空間へのカーネルメッセージ
-.TP 
-\fBNETLINK_GENERIC\fP
-netlink を簡単に使用するための一般的な netlink ファミリー。
-.PP
-netlink メッセージはバイトストリームからなり、 一つ以上の \fInlmsghdr\fP ヘッダと、それに対応するペイロード (payload)
-が含まれる。 バイトストリームには、標準の \fBNLMSG_*\fP マクロによってのみアクセスすべきである。 より詳しい情報は \fBnetlink\fP(3)
-を見よ。
-
-マルチパートメッセージ (一つ以上の \fInlmsghdr\fP ヘッダと、それに対応するペイロードが 一つバイトストリームに含まれる) においては、
-先頭のヘッダ・後続のヘッダには \fBNLM_F_MULTI\fP フラグがセットされる。ただし最後のヘッダだけは例外で、 \fBNLMSG_DONE\fP
-タイプとなる。
-
-それぞれの \fBnlmsghdr\fP の後にはペイロードが続く。
-
-.in +4n
-.nf
-struct nlmsghdr {
-    __u32 nlmsg_len;    /* ヘッダを含むメッセージの長さ */
-    __u16 nlmsg_type;   /* メッセージの内容のタイプ */
-    __u16 nlmsg_flags;  /* 追加フラグ */
-    __u32 nlmsg_seq;    /* シーケンス番号 */
-    __u32 nlmsg_pid;    /* 送信プロセスの PID */
-};
-.fi
-.in
-
-\fInlmsg_type\fP は標準のメッセージタイプのどれか一つである: \fBNLMSG_NOOP\fP メッセージは無視される。
-\fBNLMSG_ERROR\fP メッセージはエラーを示し、ペイロードには \fInlmsgerr\fP 構造体が入る。 \fBNLMSG_DONE\fP
-メッセージはマルチパートメッセージの終了を伝える。
-
-.in +4n
-.nf
-struct nlmsgerr {
-    int error;        /* 負または 0 の errno は応答を表す */
-    struct nlmsghdr msg;  /* エラーを起こしたメッセージのヘッダ */
-};
-.fi
-.in
-
-ある netlink ファミリーで指定できるメッセージタイプは、 通常もっと多い。これらに関しては適切な man ページを見てほしい。 たとえば
-\fBNETLINK_ROUTE\fP に関しては \fBrtnetlink\fP(7)  に書いてある。
-
-\fInlmsg_flags\fP の標準フラグビット
-.br
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
-.TS
-tab(:);
-lB l.
-NLM_F_REQUEST:要求メッセージ全てでセットされなければならない。
-NLM_F_MULTI:T{
-このメッセージはマルチパートメッセージの一部である。
-マルチパートメッセージは \fBNLMSG_DONE\fP で終端する。
-T}
-NLM_F_ACK:成功した場合の応答を要求する。
-NLM_F_ECHO:この要求をエコーする。
-.TE
-
-GET 要求における追加フラグビット
-.br
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
-.TS
-tab(:);
-lB l.
-NLM_F_ROOT:単一のエントリではなくテーブル全体を返す。
-NLM_F_MATCH:T{
-メッセージの内容で渡された基準 (criteria) にマッチする全てのエントリを返す。
-まだ実装されていない。
-T}
-.\" FIXME NLM_F_ATOMIC is not used any more?
-NLM_F_ATOMIC:テーブルのアトミックなスナップショットを返す。
-NLM_F_DUMP:便利なマクロ。(NLM_F_ROOT|NLM_F_MATCH) と同じ。
-.TE
-
-\fBNLM_F_ATOMIC\fP を使う場合は、 \fBCAP_NET_ADMIN\fP 権限を持つか実効ユーザー ID が 0
-でなければならない点に注意すること。
-
-NEW 要求における追加フラグビット
-.br
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
-.TS
-tab(:);
-lB l.
-NLM_F_REPLACE:現存のオブジェクトを置換する。
-NLM_F_EXCL:すでにオブジェクトがあったら置換しない。
-NLM_F_CREATE:まだオブジェクトがなければ作成する。
-NLM_F_APPEND:オブジェクトリストの最後に追加する。
-.TE
-
-\fInlmsg_seq\fP と \fInlmsg_pid\fP はメッセージの追跡に使用される。 \fInlmsg_pid\fP はメッセージの送信元を表す。
-メッセージが netlink ソケットで送信されている場合、 \fInlmsg_pid\fP とプロセスの PID は 1:1
-の関係ではない点に注意すること。 より詳しい情報は、 「\fBアドレスのフォーマット\fP」 のセクションを参照すること。
-
-.\" FIXME Explain more about nlmsg_seq and nlmsg_pid.
-\fInlmsg_seq\fP と \fInlmsg_pid\fP は netlink のコアには見えない (opaque)。
-
-netlink は信頼性の高いプロトコルではない。 netlink はメッセージを行き先に届けるために最善を尽くすが、
-メモリが足りなかったりエラーが起こったりすると メッセージを取りこぼすこともある。 信頼性の高い転送を行いたいときは、
-送信者は受信者に応答を要求することもできる。 これには \fBNLM_F_ACK\fP フラグをセットする。 応答は \fBNLMSG_ERROR\fP
-パケットのエラーフィールドを 0 にしたものになる。 アプリケーションは自分自身のメッセージを受けたときには、 応答を生成しなければならない。
-カーネルは失敗したパケットに対して、 \fBNLMSG_ERROR\fP メッセージを送ろうとする。 ユーザープロセスはこの慣習にも従う必要がある。
-
-しかし、どのような場合でもカーネルからユーザーへの 信頼性の高い転送は不可能である。 ソケットバッファが満杯の場合、カーネルは netlink
-メッセージを送信できない。 メッセージは取りこぼされて、カーネルとユーザー空間プロセスは、 カーネルの状態についての同じビューを持つことができなくなる。
-これが起こったこと (\fBrecvmsg\fP(2)  によって \fBENOBUFS\fP エラーが返される) を検知して再び同期させるのは、
-アプリケーションの責任である。
-.SS アドレスのフォーマット
-\fIsockaddr_nl\fP 構造体はユーザー空間やカーネル空間で netlink クライアントを記述する。 \fIsockaddr_nl\fP
-はユニキャスト (単一の接続先にだけ送られる) にもできるし、 netlink マルチキャストグループ (\fInl_groups\fP が 0 でない場合)
-にも送ることができる。
-
-.in +4n
-.nf
-struct sockaddr_nl {
-    sa_family_t     nl_family;  /* AF_NETLINK */
-    unsigned short  nl_pad;     /* 0 である */
-    pid_t           nl_pid;     /* プロセス ID */
-    __u32           nl_groups;  /* マルチキャストグループマスク */
-};
-.fi
-.in
-
-\fInl_pid\fP は netlink ソケットのユニキャストアドレスである。 行き先がカーネルの場合は、常に 0 である。
-ユーザー空間プロセスの場合、通常は \fInl_pid\fP は行き先のソケットを所有しているプロセスの PID である。 ただし、 \fInl_pid\fP
-はプロセスではなく netlink ソケットを同定する。 プロセスが複数の netlink ソケットを所有する場合、 \fInl_pid\fP
-は最大でも一つのソケットのプロセス ID としか等しくならない。 \fInl_pid\fP を netlink ソケットに割り当てる方法は 2 つある。
-アプリケーションが \fBbind\fP(2)  を呼ぶ前に \fInl_pid\fP を設定する場合、 \fInl_pid\fP
-が一意であることを確認するのはアプリケーションの責任となる。 アプリケーションが \fInl_pid\fP を 0
-に設定した場合、カーネルがこの値を割り当てる。 カーネルはプロセスが最初にオープンした netlink ソケットに対してプロセス ID を割り当て、
-それ以降にプロセスが作成した全ての netlink ソケットにも一意な \fInl_pid\fP を割り当てる。
-
-\fInl_groups\fP はビットマスクで、すべてのビットが netlink グループ番号を表す。
-それぞれの netlink ファミリーは 32 のマルチキャストグループのセットを持つ。
-それぞれの netlink ファミリーは 32 のマルチキャストグループの セットを持つ。
-\fBbind\fP(2) がソケットに対して呼ばれると、 \fIsockaddr_nl\fP の \fInl_groups\fP
-フィールドには listen したいグループのビットマスクがセットされる。
-デフォルトの値は 0 で、マルチキャストを一切受信しない。
-\fBsendmsg\fP(2) や \fBconnect\fP(2) によって、あるソケットからメッセージを
-マルチキャストしたいときは、 \fInl_groups\fP に送信したいグループのビットマスク
-をセットすればよい。
-実効ユーザー ID が 0 か、 \fBCAP_NET_ADMIN\fP 権限を持つユーザーのみが netlink
-マルチキャストグループに 送信したり、これを listen したりすることができる。
-マルチキャストグループ向けメッセージを受信した場合、これ対する応答は
-送り主の PID とマルチキャストグループとに送り返すべきである。
-さらに、Linux のカーネルサブシステムによっては、
-他のユーザもメッセージの送受信ができる場合がある。
-Linux 3.0 の時点では、
-\fBNETLINK_KOBJECT_UEVENT\fP, \fBNETLINK_GENERIC\fP, \fBNETLINK_ROUTE\fP,
-\fBNETLINK_SELINUX\fP グループでは他のユーザがメッセージを受信することができる。
-他のユーザがメッセージを送信できるグループは存在しない。
-.SH バージョン
-netlink へのソケットインターフェースは Linux 2.2 の新機能である。
-
-Linux 2.0 は、もっと原始的なデバイスベースの netlink インターフェースを サポートしていた (これも互換性のために今でも使用できる)。
-古いインターフェースに関してはここでは記述しない。
-
-NETLINK_SELINUX は Linux 2.6.4 で登場した。
-
-NETLINK_AUDIT は Linux 2.6.6 で登場した。
-
-NETLINK_KOBJECT_UEVENT は Linux 2.6.10 で登場した。
-
-NETLINK_W1, NETLINK_FIB_LOOKUP は Linux 2.6.13 で登場した。
-
-NETLINK_INET_DIAG, NETLINK_CONNECTOR, NETLINK_NETFILTER は Linux 2.6.14
-で登場した。
-
-NETLINK_GENERIC, NETLINK_ISCSI は Linux 2.6.15 で登場した。
-.SH 注意
-低レベルのカーネルインターフェースより、 \fIlibnetlink\fP または \fIlibnl\fP を通して netlink
-を利用するほうが良いことが多い。
-.SH バグ
-この man ページは完成していない。
-.SH 例
-以下の例では、 \fBRTMGRP_LINK\fP (ネットワークインターフェースの create/delete/up/down イベント) と
-\fBRTMGRP_IPV4_IFADDR\fP (IPv4 アドレスの add/delete イベント) マルチキャストグループを listen する
-\fBNETLINK_ROUTE\fP netlink を作成している。
-
-.in +4n
-.nf
-struct sockaddr_nl sa;
-
-memset(&sa, 0, sizeof(sa));
-sa.nl_family = AF_NETLINK;
-sa.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR;
-
-fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
-bind(fd, (struct sockaddr *) &sa, sizeof(sa));
-.fi
-.in
-
-次の例では、netlink メッセージをカーネル (pid 0) に送る方法を示している。 応答を追跡する際の信頼性を高めるために、アプリケーションが
-メッセージのシーケンス番号を正しく処理しなければならない点に注意すること。
-
-.in +4n
-.nf
-struct nlmsghdr *nh;    /* 送信する nlmsghdr とペイロード */
-struct sockaddr_nl sa;
-struct iovec iov = { (void *) nh, nh\->nlmsg_len };
-struct msghdr msg;
-
-msg = { (void *)&sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
-memset(&sa, 0, sizeof(sa));
-sa.nl_family = AF_NETLINK;
-nh\->nlmsg_pid = 0;
-nh\->nlmsg_seq = ++sequence_number;
-/* NLM_F_ACK を設定することで、カーネルに応答を要求する */
-nh\->nlmsg_flags |= NLM_F_ACK;
-
-sendmsg(fd, &msg, 0);
-.fi
-.in
-
-最後は、netlink メッセージの読み込みの例である。
-
-.in +4n
-.nf
-int len;
-char buf[4096];
-struct iovec iov = { buf, sizeof(buf) };
-struct sockaddr_nl sa;
-struct msghdr msg;
-struct nlmsghdr *nh;
-
-msg = { (void *)&sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
-len = recvmsg(fd, &msg, 0);
-
-for (nh = (struct nlmsghdr *) buf; NLMSG_OK (nh, len);
-     nh = NLMSG_NEXT (nh, len)) {
-    /* マルチパートメッセージの終わり */
-    if (nh\->nlmsg_type == NLMSG_DONE)
-        return;
-
-    if (nh\->nlmsg_type == NLMSG_ERROR)
-        /* 何らかのエラー処理を行う */
-    ...
-
-    /* ペイロードの解析を続ける */
-    ...
-}
-.fi
-.in
-.SH 関連項目
-\fBcmsg\fP(3), \fBnetlink\fP(3), \fBcapabilities\fP(7), \fBrtnetlink\fP(7)
-.PP
-libnetlink に関する情報は ftp://ftp.inr.ac.ru/ip\-routing/iproute2*
-
-libnl に関する情報は http://people.suug.ch/~tgr/libnl/
-
-RFC 3549 "Linux Netlink as an IP Services Protocol"
-.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。
diff --git a/draft/man7/rtnetlink.7 b/draft/man7/rtnetlink.7
deleted file mode 100644 (file)
index a502834..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-.\" t
-.\" Don't remove the line above, it tells man that tbl is needed.
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" Based on the original comments from Alexey Kuznetsov, written with
-.\" help from Matthew Wilcox.
-.\" $Id: rtnetlink.7,v 1.8 2000/01/22 01:55:04 freitag Exp $
-.\"*******************************************************************
-.\"
-.\" This file was generated with po4a. Translate the source file.
-.\"
-.\"*******************************************************************
-.TH RTNETLINK 7 2012\-05\-10 Linux "Linux Programmer's Manual"
-.SH 名前
-rtnetlink \- Linux IPv4 ルーティングソケット
-.SH 書式
-\fB#include <asm/types.h>\fP
-.br
-\fB#include <linux/netlink.h>\fP
-.br
-\fB#include <linux/rtnetlink.h>\fP
-.br
-\fB#include <sys/socket.h>\fP
-.sp
-\fBrtnetlink_socket = socket(AF_NETLINK, int \fP\fIsocket_type\fP\fB,
-NETLINK_ROUTE);\fP
-.SH 説明
-.\" FIXME ? all these macros could be moved to rtnetlink(3)
-\fBrtnetlink\fP はカーネルのルーティングテーブルを読んだり変更したり するためのものである。これはカーネルが内部のサブシステムと
-通信するためにも用いられているが、それはここでは記述しない。 この man ページではユーザー空間のプログラムとの通信に関してのみ述べる。
-ネットワーク経路・IP アドレス・リンクパラメータ・ 近傍設定 (neighbor setup)・キューイングルール (queueing
-dicipline)・ トラフィッククラス・パケットのクラス分類などが、すべて \fBNETLINK_ROUTE\fP ソケットを通して制御できる。
-\fBrtnetlink\fP は netlink メッセージをベースにしている。詳細は \fBnetlink\fP(7)  を見ること。
-.SS ルーティング属性
-rtnetlink メッセージには、初期ヘッダの後に付加的な属性を 持つものがある。
-
-.in +4n
-.nf
-struct rtattr {
-    unsigned short rta_len;    /* Length of option */
-    unsigned short rta_type;   /* Type of option */
-    /* Data follows */
-};
-.fi
-.in
-
-これらの属性の操作は、 RTA_* マクロか libnetlink を通してのみ 行うべきである。 \fBrtnetlink\fP(3)  を見よ。
-.SS メッセージ
-rtnetlink は (標準的な netlink メッセージに加えて)  以下のメッセージタイプから構成される。
-.TP 
-\fBRTM_NEWLINK\fP, \fBRTM_DELLINK\fP, \fBRTM_GETLINK\fP
-指定したネットワークインターフェースの情報を、生成・削除・取得する。 これらのメッセージは \fIifinfomsg\fP 構造体と、それに続いていくつかの
-\fIrtattr\fP 構造体を伴う。
-
-.nf
-struct ifinfomsg {
-    unsigned char  ifi_family; /* AF_UNSPEC */
-    unsigned short ifi_type;   /* Device type */
-    int            ifi_index;  /* Interface index */
-    unsigned int   ifi_flags;  /* Device flags  */
-    unsigned int   ifi_change; /* change mask */
-};
-.fi
-
-.\" FIXME ifi_type
-\fIifi_flags\fP はデバイスのフラグである。 \fBnetdevice\fP(7)  を見よ。 \fIifi_index\fP
-は他と重ならないインターフェースの index である。 \fIifi_change\fP は将来の利用のために予約されており、常に 0xFFFFFFFF
-にセットすべきである。
-.TS
-tab(:);
-c
-l l l.
-ルーティング属性
-rta_type:値の型:説明
-_
-IFLA_UNSPEC:\-:指定されていない。
-IFLA_ADDRESS:hardware address:インターフェース L2 アドレス
-IFLA_BROADCAST:hardware address:L2 ブロードキャストアドレス
-IFLA_IFNAME:asciiz string:デバイス名
-IFLA_MTU:unsigned int:デバイスの MTU
-IFLA_LINK:int:リンクタイプ
-IFLA_QDISC:asciiz string:キューイングのルール
-IFLA_STATS:T{
-下記参照
-T}:インターフェースの統計
-.TE
-.sp
-IFLA_STATS の値の型は \fIstruct net_device_stats\fP である。
-.TP 
-\fBRTM_NEWADDR\fP, \fBRTM_DELADDR\fP, \fBRTM_GETADDR\fP
-インターフェースの IP アドレスの情報を追加・削除・取得する。 Linux 2.2 では、一つのインターフェースに複数の IP アドレスを
-保持させることができ、これは 2.0 の別名デバイスの概念を置き換える。 Linux 2.2 では、これらのメッセージは IPv4 と IPv6
-の両方のアドレスをサポートしている。 これらは \fIifaddrmsg\fP 構造体を伴う。そのあとに \fIrtattr\fP
-ルーティング属性が続くこともある。
-
-.nf
-struct ifaddrmsg {
-    unsigned char ifa_family;    /* Address type */
-    unsigned char ifa_prefixlen; /* Prefixlength of address */
-    unsigned char ifa_flags;     /* Address flags */
-    unsigned char ifa_scope;     /* Address scope */
-    int           ifa_index;     /* Interface index */
-};
-.fi
-
-\fIifa_family\fP はアドレスファミリーのタイプである (現在は \fBAF_INET\fP または \fBAF_INET6\fP)。
-\fIifa_prefixlen\fP はアドレスのアドレスマスクの長さである (IPv4 のように、 そのファミリーで定義されている場合)。
-\fIifa_scope\fP はアドレスのスコープである。 \fIifa_index\fP はアドレスが関連づけられているインターフェースの index である。
-\fIifa_flags\fP はフラグワードで、 二つめのアドレス (古い別名インターフェース) の場合は \fBIFA_F_SECONDARY\fP
-に、永続的なアドレスの場合は \fBIFA_F_PERMANENT\fP に適用される。ユーザーによってセットされるフラグと、 undocumented
-なフラグがある。
-.TS
-tab(:);
-c
-l l l.
-属性
-rta_type:値の型:説明
-_
-IFA_UNSPEC:\-:指定されていない
-IFA_ADDRESS:raw protocol address:インターフェースアドレス
-IFA_LOCAL:raw protocol address:ローカルアドレス
-IFA_LABEL:asciiz string:インターフェースの名前
-IFA_BROADCAST:raw protocol address:ブロードキャストアドレス
-IFA_ANYCAST:raw protocol address:anycast アドレス
-IFA_CACHEINFO:struct ifa_cacheinfo:アドレス情報
-.TE
-.\" FIXME struct ifa_cacheinfo
-.TP 
-\fBRTM_NEWROUTE\fP, \fBRTM_DELROUTE\fP, \fBRTM_GETROUTE\fP
-ネットワーク経路の情報を生成・削除・取得する。 これらのメッセージは \fIrtmsg\fP 構造体を伴う。そのあとにいくつかの \fIrtattr\fP
-構造体を続けることもできる。 \fBRTM_GETROUTE\fP で \fIrtm_dst_len\fP と \fIrtm_src_len\fP に 0
-をセットすると、 指定されたルーティングテーブルの全てのエントリを所得する。 \fIrtm_table\fP と \fIrtm_protocol\fP
-以外の他のフィールドに 0 を入れると、ワイルドカードを意味する。
-
-.nf
-struct rtmsg {
-    unsigned char rtm_family;   /* Address family of route */
-    unsigned char rtm_dst_len;  /* Length of destination */
-    unsigned char rtm_src_len;  /* Length of source */
-    unsigned char rtm_tos;      /* TOS filter */
-
-    unsigned char rtm_table;    /* Routing table ID */
-    unsigned char rtm_protocol; /* Routing protocol; see below */
-    unsigned char rtm_scope;    /* See below */
-    unsigned char rtm_type;     /* See below */
-
-    unsigned int  rtm_flags;
-};
-.fi
-.TS
-tab(:);
-l l.
-rtm_type:経路のタイプ
-_
-RTN_UNSPEC:未知の経路
-RTN_UNICAST:ゲートウェイまたはダイレクトな経路
-RTN_LOCAL:ローカルインターフェースの経路
-RTN_BROADCAST:T{
-ローカルなブロードキャスト経路 (ブロードキャストとして送信される)
-T}
-RTN_ANYCAST:T{
-ローカルなブロードキャスト経路 (ユニキャストとして送信される)
-T}
-RTN_MULTICAST:マルチキャスト経路
-RTN_BLACKHOLE:パケットを捨てる経路
-RTN_UNREACHABLE:到達できない行き先
-RTN_PROHIBIT:パケットを拒否する経路
-RTN_THROW:経路探索を別のテーブルで継続
-RTN_NAT:ネットワークアドレスの変換ルール
-RTN_XRESOLVE:T{
-外部レゾルバを参照 (実装されていない)
-T}
-.TE
-.TS
-tab(:);
-l l.
-rtm_protocol:経路の情報源
-_
-RTPROT_UNSPEC:不明
-RTPROT_REDIRECT:T{
-ICMP リダイレクトによる (現在は用いられない)
-T}
-RTPROT_KERNEL:カーネルによる
-RTPROT_BOOT:ブート時
-RTPROT_STATIC:管理者による
-.TE
-
-\fBRTPROT_STATIC\fP よりも大きな値はカーネルによって解釈されない。これは 単なるユーザーへの情報である。これらは経路情報の情報源を
-タグ付けしたり、複数のルーティングデーモンからの情報を 区別するために用いることができる。 既に割り当てられているルーティングデーモンの識別子については
-\fI<linux/rtnetlink.h>\fP を見よ。
-
-\fIrtm_scope\fP は行き先への距離である。
-.TS
-tab(:);
-l l.
-RT_SCOPE_UNIVERSE:グローバルな経路
-RT_SCOPE_SITE:T{
-ローカルな自律システムにおける内部経路
-T}
-RT_SCOPE_LINK:このリンク上の経路
-RT_SCOPE_HOST:ローカルホスト上の経路
-RT_SCOPE_NOWHERE:行き先が存在しない
-.TE
-
-ユーザーは \fBRT_SCOPE_UNIVERSE\fP と \fBRT_SCOPE_SITE\fP の間の値を用いることができる。
-
-\fIrtm_flags\fP は以下の意味を持つ:
-.TS
-tab(:);
-l l.
-RTM_F_NOTIFY:T{
-経路が変更されると、 rtnetlink を通してユーザーに通知が行く。
-T}
-RTM_F_CLONED:経路は他の経路によって複製された。
-RTM_F_EQUALIZE:マルチパスイコライザ (まだ実装されていない)
-.TE
-
-\fIrtm_table\fP ではルーティングテーブルを指定する。
-.TS
-tab(:);
-l l.
-RT_TABLE_UNSPEC:指定されていないルーティングテーブル
-RT_TABLE_DEFAULT:デフォルトのテーブル
-RT_TABLE_MAIN:メインのテーブル
-RT_TABLE_LOCAL:ローカルテーブル
-.TE
-
-ユーザーは \fBRT_TABLE_UNSPEC\fP と \fBRT_TABLE_DEFAULT\fP.  の間の任意の値を用いることができる。
-.TS
-tab(:);
-c
-l l l.
-属性
-rta_type:値の型:説明
-_
-RTA_UNSPEC:\-:無視される
-RTA_DST:protocol address:経路の行き先アドレス
-RTA_SRC:protocol address:経路の発信元アドレス
-RTA_IIF:int:入力インターフェースの index
-RTA_OIF:int:出力インターフェースの index
-RTA_GATEWAY:protocol address:経路のゲートウェイ
-RTA_PRIORITY:int:経路の優先度
-RTA_PREFSRC::
-RTA_METRICS:int:経路のメトリック
-RTA_MULTIPATH::
-RTA_PROTOINFO::
-RTA_FLOW::
-RTA_CACHEINFO::
-.TE
-
-\fB(これらの値を埋めること!)\fP
-.TP 
-\fBRTM_NEWNEIGH\fP, \fBRTM_DELNEIGH\fP, \fBRTM_GETNEIGH\fP
-近傍テーブル (neighbor table) のエントリ (例えば ARP エントリ) の情報を追加・削除・取得する。 このメッセージは
-\fIndmsg\fP 構造体を伴う。
-
-.nf
-struct ndmsg {
-    unsigned char ndm_family;
-    int           ndm_ifindex;  /* Interface index */
-    __u16         ndm_state;    /* State */
-    __u8          ndm_flags;    /* Flags */
-    __u8          ndm_type;
-};
-
-struct nda_cacheinfo {
-    __u32         ndm_confirmed;
-    __u32         ndm_used;
-    __u32         ndm_updated;
-    __u32         ndm_refcnt;
-};
-.fi
-
-\fIndm_state\fP は以下の状態のビットマスクである:
-.TS
-tab(:);
-l l.
-NUD_INCOMPLETE:現在レゾルブ中のキャッシュエントリ
-NUD_REACHABLE:動作確認済みのキャッシュエントリ
-NUD_STALE:期限切れのキャッシュエントリ
-NUD_DELAY:タイマ待ちのキャッシュエントリ
-NUD_PROBE:再確認中のキャッシュエントリ
-NUD_FAILED:不正なキャッシュエントリ
-NUD_NOARP:行き先キャッシュのないデバイス
-NUD_PERMANENT:静的なエントリ
-.TE
-
-有効な \fIndm_flags\fP は以下の通り:
-.TS
-tab(:);
-l l.
-NTF_PROXY:プロクシ arp エントリ
-NTF_ROUTER:IPv6 ルータ
-.TE
-
-.\" FIXME
-.\" document the members of the struct better
-\fIrtattr\fP 構造体は、 \fIrta_type\fP フィールドに応じてそれぞれ以下の意味を持つ:
-.TS
-tab(:);
-l l.
-NDA_UNSPEC:未知のタイプ
-NDA_DST:近傍キャッシュネットワーク層の行き先アドレス
-NDA_LLADDR:近傍キャッシュリンク層のアドレス
-NDA_CACHEINFO:キャッシュの統計
-.TE
-
-\fIrta_type\fP フィールドが \fBNDA_CACHEINFO\fP の場合には、 \fIstruct nda_cacheinfo\fP ヘッダが続く。
-.TP 
-\fBRTM_NEWRULE\fP, \fBRTM_DELRULE\fP, \fBRTM_GETRULE\fP
-ルーティングルールを追加・削除・取得する。 \fIstruct rtmsg\fP を伴う。
-.TP 
-\fBRTM_NEWQDISC\fP, \fBRTM_DELQDISC\fP, \fBRTM_GETQDISC\fP
-キューイングルールを追加・削除・取得する。 このメッセージは \fIstruct tcmsg\fP を伴い、またそのあとに属性がいくつか続くこともある。
-
-.nf
-struct tcmsg {
-    unsigned char    tcm_family;
-    int              tcm_ifindex;   /* interface index */
-    __u32            tcm_handle;    /* Qdisc handle */
-    __u32            tcm_parent;    /* Parent qdisc */
-    __u32            tcm_info;
-};
-.fi
-.TS
-tab(:);
-c
-l l l.
-属性
-rta_type:値の型:説明
-_
-TCA_UNSPEC:\-:指定されていない
-TCA_KIND:asciiz string:キューイングルールの名前
-TCA_OPTIONS:byte sequence:Qdisc 特有のオプションが続く
-TCA_STATS:struct tc_stats:Qdisc の統計
-TCA_XSTATS:qdisc specific:モジュール特有の統計
-TCA_RATE:struct tc_estimator:レート制限
-.TE
-
-さらに、 qdisc モジュール特有の様々な属性を指定できる。 詳細な情報は適切なインクルードファイルを見よ。
-.TP 
-\fBRTM_NEWTCLASS\fP, \fBRTM_DELTCLASS\fP, \fBRTM_GETTCLASS\fP
-トラフィッククラスを追加・削除・取得する。 これらのメッセージは、上述の \fIstruct tcmsg\fP を伴う。
-.TP 
-\fBRTM_NEWTFILTER\fP, \fBRTM_DELTFILTER\fP, \fBRTM_GETTFILTER\fP
-トラフィックフィルターの情報を追加・削除・取得する。 これらのメッセージは、上述の \fIstruct tcmsg\fP を伴う。
-.SH バージョン
-\fBrtnetlink\fP は Linux 2.2 の新機能である。
-.SH バグ
-このマニュアルは完全ではない。
-.SH 関連項目
-\fBcmsg\fP(3), \fBrtnetlink\fP(3), \fBip\fP(7), \fBnetlink\fP(7)
-.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。
index ffb7d3b..8d95589 100644 (file)
@@ -115,9 +115,8 @@ is marked append\-only (see \fBchattr\fP(1)).
 \fIfd\fP がパイプか FIFO を参照している。
 .SH バージョン
 .\" See http://sourceware.org/bugzilla/show_bug.cgi?id=14964
-\fBfallocate\fP()  is available on Linux since kernel 2.6.23.  Support is
-provided by glibc since version 2.10.  The \fBFALLOC_FL_*\fP flags are defined
-in glibc headers only since version 2.18.
+\fBfallocate\fP()  はカーネル 2.6.23 以降の Linux で利用可能である。 glibc での対応はバージョン 3.10
+以降で行われている。 \fBFALLOC_FL_*\fP が glibc のヘッダファイルで定義されているのは、バージョン 2.18 以降のみである。
 .SH 準拠
 \fBfallocate\fP()  は Linux 固有である。
 .SH 関連項目
index 0553285..19585d4 100644 (file)
@@ -31,7 +31,7 @@
 .\"*******************************************************************
 .TH GET_MEMPOLICY 2 2008\-08\-15 Linux "Linux Programmer's Manual"
 .SH 名前
-get_mempolicy \- retrieve NUMA memory policy for a process
+get_mempolicy \- プロセスの NUMA メモリのポリシーを取得する
 .SH 書式
 \fB#include <numaif.h>\fP
 .nf
index 50a0efe..a02eb11 100644 (file)
@@ -24,7 +24,7 @@ getcpu \- 呼び出し元スレッドが動作している CPU と NUMA ノー
 \fBint getcpu(unsigned *\fP\fIcpu\fP\fB, unsigned *\fP\fInode\fP\fB, struct getcpu_cache *\fP\fItcache\fP\fB);\fP
 .fi
 
-\fINote\fP: There is no glibc wrapper for this system call; see NOTES.
+\fI注\fP: このシステムコールには glibc のラッパー関数はない。「注意」の節を参照。
 .SH 説明
 \fBgetcpu\fP() システムコールは、呼び出し元のスレッドやプロセスが
 現在動作しているプロセッサやノードの情報を特定し、
index da5334b..9771738 100644 (file)
@@ -234,7 +234,7 @@ POSIX.1b.  POSIX.1\-2001 では、 \fBposix_madvise\fP(3)  を \fBPOSIX_MADV_NOR
 \fBMADV_REMOVE\fP, \fBMADV_DONTFORK\fP, \fBMADV_DOFORK\fP, \fBMADV_HWPOISON\fP,
 \fBMADV_MERGEABLE\fP, \fBMADV_UNMERGEABLE\fP は Linux 固有である。
 .SH 注意
-.SS "Linux notes"
+.SS "Linux での注意"
 .LP
 現在の Linux の実装 (2.4.0) では、 このシステムコールをアドバイスというよりは命令と見ている。
 したがってこのアドバイスに対して通常行われる動作が不可能な場合は、 エラーを返すことがある (上記の エラー の記述を参照)。
index b6507d2..60b7eb6 100644 (file)
@@ -49,7 +49,7 @@
 .\"*******************************************************************
 .TH MBIND 2 2008\-08\-15 Linux "Linux Programmer's Manual"
 .SH 名前
-mbind \- set memory policy for a memory range
+mbind \- メモリ領域に対してメモリポリシーを設定する
 .SH 書式
 .nf
 \fB#include <numaif.h>\fP
@@ -101,14 +101,12 @@ context)  に移動した場合でも、そのプロセスの現在の CPU 集
 \fBMPOL_F_RELATIVE_NODES\fP (Linux\-2.6.26 以降)
 空でない \fInodemask\fP は、そのプロセスの現在の CPU 集合で許可されているノード ID 集合 における相対的なノード ID である。
 .PP
-\fInodemask\fP points to a bit mask of nodes containing up to \fImaxnode\fP bits.
-The bit mask size is rounded to the next multiple of \fIsizeof(unsigned
-long)\fP, but the kernel will only use bits up to \fImaxnode\fP.  A NULL value of
-\fInodemask\fP or a \fImaxnode\fP value of zero specifies the empty set of nodes.
-If the value of \fImaxnode\fP is zero, the \fInodemask\fP argument is ignored.
-Where a \fInodemask\fP is required, it must contain at least one node that is
-on\-line, allowed by the process's current cpuset context [unless the
-\fBMPOL_F_STATIC_NODES\fP mode flag is specified], and contains memory.
+\fInodemask\fP は、最大で \fImaxnode\fP ビットから構成されるノードのビットマスクを指す。 ビットマスクの大きさは、直近の
+\fIsizeof(unsigned long)\fP の倍数に切り上げられるが、カーネルが使用するのは \fImaxnode\fP 個までのビットだけである。
+NULL 値の \fInodemask\fP もしくは値が 0 の \fImaxnode\fP はノードの空集合を表す。 \fImaxnode\fP の値が 0 の場合、
+\fInodemask\fP 引き数は無視される。 \fInodemask\fP が必須の場面では、 \fInodemask\fP に、オンラインで、そのプロセスの現在の
+CPU 集合コンテキストで 許可されており (\fBMPOL_F_STATIC_NODES\fP モードフラグが指定されていない場合)、メモリがあるノードが
+少なくとも一つ入っていなければならない。
 
 モード \fBMPOL_DEFAULT\fP はデフォルトではないプロセスのメモリポリシーを削除し、 デフォルトの動作に戻すことを指定するものである。
 \fBmbind\fP()  経由で、あるメモリ領域に対して \fBMPOL_DEFAULT\fP
index c0e3929..24aae38 100644 (file)
@@ -34,11 +34,11 @@ migrate_pages \- プロセスの全ページを別のノード集合に移動す
 .sp
 \fI\-lnuma\fP とリンクする。
 .SH 説明
-\fBmigrate_pages\fP()  attempts to move all pages of the process \fIpid\fP that
-are in memory nodes \fIold_nodes\fP to the memory nodes in \fInew_nodes\fP.  Pages
-not located in any node in \fIold_nodes\fP will not be migrated.  As far as
-possible, the kernel maintains the relative topology relationship inside
-\fIold_nodes\fP during the migration to \fInew_nodes\fP.
+\fBMIGRATE_PAGES\fP() は、メモリノード \fIold_nodes\fP にあるプロセス \fIpid\fP
+の全ページを、メモリノード \fInew_nodes\fP に移動しようとする。\fIold_nodes\fP で
+指定されたメモリノードに置かれていないページは移動されない。
+カーネルは、 \fInew_nodes\fP への移動の際に、 \fIold_nodes\fP 内の相対的な
+トポロジー関係を可能な限り維持しようとする。
 
 引き数 \fIold_nodes\fP と \fInew_nodes\fP は、最大で \fImaxnode\fP ビットから
 構成されるノード番号のビットマスクへのポインタである。
@@ -57,9 +57,9 @@ possible, the kernel maintains the relative topology relationship inside
 別のプロセスと共有しているページは、呼び出したプロセスが
 \fBCAP_SYS_NICE\fP 特権を持っている場合にのみ移動される。
 .SH 返り値
-On success \fBmigrate_pages\fP()  returns the number of pages that could not be
-moved (i.e., a return of zero means that all pages were successfully
-moved).  On error, it returns \-1, and sets \fIerrno\fP to indicate the error.
+\fBmigrate_pages\fP() は、移動できなかったページ数を返す
+(つまり、移動に成功した場合は返り値は 0 となる)。
+エラーの場合、 \-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
 .SH エラー
 .TP 
 \fBEPERM\fP
@@ -96,7 +96,7 @@ moved).  On error, it returns \-1, and sets \fIerrno\fP to indicate the error.
 \fBnuma_maps\fP(5), \fBcpuset\fP(7), \fBnuma\fP(7), \fBmigratepages\fP(8),
 \fBnuma_stat\fP(8)
 
-\fIDocumentation/vm/page_migration\fP in the Linux kernel source tree
+Linux カーネルソースの \fIDocumentation/vm/page_migration\fP
 .SH この文書について
 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
index 89835b6..5e2ead1 100644 (file)
@@ -160,7 +160,7 @@ section) 内では書き込み時コピーによる ページフォールトさ
 メモリのロックは累積しない。 すなわち複数回 \fBmlock\fP()  や \fBmlockall\fP()  を呼び出してロックされたページでも、
 対応する範囲に対して \fBmunlock\fP()  を 1 回呼び出したり \fBmunlockall\fP()  を呼び出したりするだけでロック解除される。
 複数の場所や複数のプロセスにマップされているページは、少なくとも一つの場所、 一つのプロセスでロックされている限りは RAM に残り続ける。
-.SS "Linux notes"
+.SS "Linux での注意"
 Linux では、 \fBmlock\fP()  と \fBmunlock\fP()  は自動的に \fIaddr\fP
 を端数切り捨てにより一番近いページ境界へと丸める。 しかし POSIX.1\-2001 は \fIaddr\fP
 がページ境界に合っていることを要求する実装も許している。 そのため移植性を意図したアプリケーションではきちんと境界に合わせた方が良い。
index 3c36eed..e60980a 100644 (file)
@@ -147,8 +147,8 @@ See NOTES for information on feature test macro requirements.
 (訳注:マッピングは通常はメモリ・アドレスが増加する向きに行うが、 このオプションを指定すると逆向きにマッピングを行う)
 .TP 
 \fBMAP_HUGETLB\fP (Linux 2.6.32 以降)
-Allocate the mapping using "huge pages." See the Linux kernel source file
-\fIDocumentation/vm/hugetlbpage.txt\fP for further information.
+"huge page" を使ってマッピングを割り当てる。詳しい情報は、Linux カーネルソースの
+\fIDocumentation/vm/hugetlbpage.txt\fP を参照。
 .TP 
 \fBMAP_LOCKED\fP (Linux 2.5.37 以降)
 .\" If set, the mapped pages will not be swapped out.
index 863d730..57421f8 100644 (file)
@@ -57,7 +57,7 @@ mmap2 \- ファイルやデバイスをメモリにマップする
 .SH エラー
 .TP 
 \fBEFAULT\fP
-Problem with getting the data from user space.
+ユーザ空間からデータを取得するときに問題があった。
 .TP 
 \fBEINVAL\fP
 (ページサイズが 4096 バイトでないプラットフォームにおいて)  \fIoffset * 4096\fP がシステムのページサイズの倍数ではない。
index 6eb1fcf..2545147 100644 (file)
@@ -114,10 +114,10 @@ Linux ではメモリはページに分割される。ユーザー・プロセ
 \fBbrk\fP(2), \fBgetpagesize\fP(2), \fBgetrlimit\fP(2), \fBmlock\fP(2), \fBmmap\fP(2),
 \fBsbrk\fP(2), \fBrealloc\fP(3), \fBmalloc\fP(3)
 
-Your favorite text book on operating systems for more information on paged
-memory (e.g., \fIModern Operating Systems\fP by Andrew S. Tanenbaum, \fIInside
-Linux\fP by Randolf Bentson, \fIThe Design of the UNIX Operating System\fP by
-Maurice J. Bach)
+ページ分割されたメモリについてもっと詳しく知りたいならば、あなたのお気に入りのオペレーティングシステムの教科書を参照してほしい (例えば、
+\fIModern Operating Systems\fP by Andrew S. Tanenbaum, \fIInside Linux\fP by
+Randolf Bentson, \fIThe Design of the UNIX Operating System\fP by Maurice
+J. Bach.)
 .SH この文書について
 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
index 21bfed9..06f1d9f 100644 (file)
@@ -75,8 +75,7 @@ struct msqid_ds {
 .in
 .fi
 .PP
-The \fIipc_perm\fP structure is defined as follows (the highlighted fields are
-settable using \fBIPC_SET\fP):
+\fIipc_perm\fP 構造体は以下のように定義されている (強調されたフィールドは \fBIPC_SET\fP を使って設定可能である):
 .PP
 .nf
 .in +4n
index f35f0c0..77f62c8 100644 (file)
@@ -119,7 +119,7 @@ such old systems may need to include these header files.
 \fBMSGMNI\fP
 システム全体のメッセージ・キュー数の最大値: 方針依存 (Linux では、この制限値は \fI/proc/sys/kernel/msgmni\fP
 経由で参照したり、変更したりできる)。
-.SS "Linux notes"
+.SS "Linux での注意"
 Linux 2.3.20 までは、削除が予定されているメッセージ・キューに対して \fBmsgget\fP()  を行うと \fBEIDRM\fP
 がエラーとして返されるようになっていた。
 .SH バグ
index 33926aa..fa4d53f 100644 (file)
@@ -1,5 +1,6 @@
 .\" Copyright (C) 2004 Andries Brouwer (aeb@cwi.nl)
 .\"
+.\" %%%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.
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\"*******************************************************************
 .\"
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH SET_TID_ADDRESS 2 2004\-09\-10 Linux "Linux Programmer's Manual"
+.TH SET_TID_ADDRESS 2 2012\-07\-19 Linux "Linux Programmer's Manual"
 .SH 名前
 set_tid_address \- スレッド ID へのポインタを設定する
 .SH 書式
@@ -35,25 +37,32 @@ set_tid_address \- スレッド ID へのポインタを設定する
 \fBlong set_tid_address(int *\fP\fItidptr\fP\fB);\fP
 .fi
 .SH 説明
-カーネルは各プロセスについて \fIset_child_tid\fP と \fIclear_child_tid\fP という 2 つの値を保持する。
-これらはデフォルトでは NULL である。
-.SS set_child_tid
+各プロセスについて、カーネルは \fIset_child_tid\fP と \fIclear_child_tid\fP という 2 つの属性を保持する。この 2
+つの属性はデフォルトでは NULL である。
+.TP 
+\fIset_child_tid\fP
 プロセスが \fBCLONE_CHILD_SETTID\fP フラグを指定した \fBclone\fP(2)  によって開始された場合、
-\fIset_child_tid\fP は \fIchild_tidptr\fP に設定される。 これは \fBclone\fP(2)  のシステムコールの 5
-番目の引き数である。
-.LP
+\fIset_child_tid\fP は \fBclone\fP(2) のシステムコールの \fIctid\fP 引き数で渡された値に設定される。
+.IP
 \fIset_child_tid\fP が設定された場合、一番最初に新しいプロセスが行うことは、 このアドレスに自身の PID を書き込むことである。
-.SS clear_child_tid
-プロセスが \fBCLONE_CHILD_CLEARTID\fP フラグを指定した \fBclone\fP(2)  によって開始された場合、
-\fIclear_child_tid\fP は \fIchild_tidptr\fP に設定される。 これは \fBclone\fP(2)  のシステムコールの 5
-番目の引き数である。
+.TP 
+\fIclear_child_tid\fP
+プロセスが \fBCLONE_CHILD_CLEARTID\fP フラグを指定した \fBclone\fP(2) によって開始された場合、
+\fIclear_child_tid\fP は \fBclone\fP(2) のシステムコールの \fIctid\fP 引き数で渡された値に設定される。
 .LP
 システムコール \fBset_tid_address\fP()  は呼び出し元プロセスの \fIclear_child_tid\fP の値を \fItidptr\fP
 に設定する。
 .LP
-\fIclear_child_tid\fP が設定されているときにプロセスが終了すると、 そのプロセスは他のプロセスまたはスレッドとメモリを共有しているので、
-このアドレスに 0 が書き込まれ、 \fIfutex(child_tidptr, FUTEX_WAKE, 1, NULL, NULL, 0);\fP
-の呼び出しが実行される (つまり、この futex で待っている 1 つのプロセスを起こす (wake))。 エラーは無視される。
+When a process whose \fIclear_child_tid\fP is not NULL terminates, then, if the
+process is sharing memory with other processes or threads, then 0 is written
+at the address specified in \fIclear_child_tid\fP and the kernel performs the
+following operation:
+
+    futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0);
+
+The effect of this operation is to wake a single process that is performing
+a futex wait on the memory location.  Errors from the futex wake operation
+are ignored.
 .SH 返り値
 \fBset_tid_address\fP()  は常に現在のプロセスの PID を返す。
 .SH エラー
@@ -65,6 +74,6 @@ set_tid_address \- スレッド ID へのポインタを設定する
 .SH 関連項目
 \fBclone\fP(2), \fBfutex\fP(2)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。
index 9bc95cd..5e1050b 100644 (file)
@@ -80,8 +80,7 @@ struct shmid_ds {
 .fi
 .in
 .PP
-The \fIipc_perm\fP structure is defined as follows (the highlighted fields are
-settable using \fBIPC_SET\fP):
+\fIipc_perm\fP 構造体は以下のように定義されている (強調されたフィールドは \fBIPC_SET\fP を使って設定可能である):
 .PP
 .in +4n
 .nf
index 9c906e6..9abdecc 100644 (file)
@@ -75,8 +75,8 @@ shmget \- 共有メモリ・セグメントを割り当てる
 引き数と同じ形式で同じ意味を持つ。 今のところ、システムは実行 (execute) 許可を参照しない。
 .TP 
 \fBSHM_HUGETLB\fP (Linux 2.6 以降)
-Allocate the segment using "huge pages." See the Linux kernel source file
-\fIDocumentation/vm/hugetlbpage.txt\fP for further information.
+"ヒュージページ (huge page)" を使うセグメントを割り当てる。詳細な情報は、Linux カーネルソースのファイル
+\fIDocumentation/vm/hugetlbpage.txt\fP を参照。
 .TP 
 \fBSHM_NORESERVE\fP (Linux 2.6.15 以降)
 .\" As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also
@@ -172,7 +172,7 @@ such old systems may need to include these header files.
 \fI/proc/sys/kernel/shmmni\fP 経由で参照したり、変更したりできる)。
 .PP
 プロセス当りの共有メモリ・セグメントの個数の最大値 (\fBSHMSEG\fP)  に関する実装上の制限はない。
-.SS "Linux notes"
+.SS "Linux での注意"
 バージョン 2.3.30 までは、Linux は 削除が予定されている共有メモリ・セグメントに対して \fBshmget\fP()  が行われると
 \fBEIDRM\fP を返していた。
 .SH バグ
index f55f265..598eb6a 100644 (file)
@@ -98,10 +98,9 @@ splice \- パイプとの間でデータを継ぎ合わせる
 .SH 準拠
 このシステムコールは Linux 固有である。
 .SH 注意
-The three system calls \fBsplice\fP(), \fBvmsplice\fP(2), and \fBtee\fP(2), provide
-user\-space programs with full control over an arbitrary kernel buffer,
-implemented within the kernel using the same type of buffer that is used for
-a pipe.  In overview, these system calls perform the following tasks:
+3 つのシステムコール (\fBsplice\fP(), \fBvmsplice\fP(2), \fBtee\fP(2))
+を使うと、ユーザ空間プログラムは任意のカーネルバッファに対する 完全な制御ができる。カーネルバッファは、パイプに使用されているのと
+同種のバッファを使ってカーネル内に実装されている。 大まかにいうと、これらのシステムコールは以下の仕事を行う:
 .TP  1.2i
 \fBsplice\fP()
 バッファから任意のファイルディスクリプタや、その逆方向、 もしくはあるバッファから別のバッファへの、データ移動を行う。
index dfbc31c..0888203 100644 (file)
@@ -51,8 +51,7 @@ VM86 モードはプロテクトモードタスクにおける リアルモー
 .SH エラー
 .TP 
 \fBEFAULT\fP
-This return value is specific to i386 and indicates a problem with getting
-user\-space data.
+この返り値は i386 固有のものであり、 ユーザー空間のデータを取得する際に問題があったことを示す。
 .TP 
 \fBENOSYS\fP
 この返り値は、このコールが現在のアーキテクチャで実装されていないことを示す。
index 237598b..c2126a5 100644 (file)
@@ -23,13 +23,12 @@ unit) のレジスタに転送する。 これは浮動小数点演算の精度
 .SH 準拠
 この関数は非標準で GNU 拡張である。
 .SH 注意
-As of glibc 2.1 this function does not exist anymore.  There are new
-functions from C99, with prototypes in \fI<fenv.h>\fP, to control FPU
-rounding modes, like \fBfegetround\fP(3), \fBfesetround\fP(3), and the
-floating\-point environment, like \fBfegetenv\fP(3), \fBfeholdexcept\fP(3),
-\fBfesetenv\fP(3), \fBfeupdateenv\fP(3), and FPU exception handling, like
-\fBfeclearexcept\fP(3), \fBfegetexceptflag\fP(3), \fBferaiseexcept\fP(3),
-\fBfesetexceptflag\fP(3), and \fBfetestexcept\fP(3).
+glibc 2.1 以降では、この関数は存在しない。 新たな関数群が C99 から導入された。これらのプロトタイプは
+\fI<fenv.h>\fP に置かれている。 FPU の丸めモードの制御には \fBfegetround\fP(3),
+\fBfesetround\fP(3) などが、浮動小数点関連の環境には \fBfegetenv\fP(3), \fBfeholdexcept\fP(3),
+\fBfesetenv\fP(3), \fBfeupdateenv\fP(3) などが、 FPU 例外処理には \fBfeclearexcept\fP(3),
+\fBfegetexceptflag\fP(3), \fBferaiseexcept\fP(3), \fBfesetexceptflag\fP(3),
+\fBfetestexcept\fP(3) などが導入された。
 .PP
 FPU のコントロールワードへどうしても直接アクセスする必要がある場合には、 \fI<fpu_control.h>\fP の
 \fB_FPU_GETCW\fP マクロと \fB_FPU_SETCW\fP マクロを用いることは可能である。
index 21c2c37..9782624 100644 (file)
@@ -73,7 +73,7 @@ alloca \- 自動的に解放されるメモリを割り当てる
 \fBsiglongjmp\fP(3)  の呼び出しによりジャンプした場合には、 割り当てられた空間は自動的に解放される。
 
 \fBalloca\fP()  で割り当てられた空間を \fBfree\fP(3)  しようとすることのないように!
-.SS "Notes on the GNU version"
+.SS "GNU 版についての注意"
 通常 \fBgcc\fP(1)  は \fBalloca\fP()  の呼び出しをインラインコードに変換する。 \fI\-ansi\fP, \fI\-std=c89\fP,
 \fI\-std=c99\fP, \fI\-fno\-builtin\fP のいずれかのオプションが指定された場合、この変換は行われない (また
 \fI<alloca.h>\fP のインクルードも行われない)。 だだし、デフォルトでは glibc 版の
index 9027691..40797e3 100644 (file)
@@ -39,14 +39,11 @@ catgets \- メッセージカタログからメッセージを取り出す
 \fB              const char *\fP\fImessage\fP\fB);\fP
 .fi
 .SH 説明
-\fBcatgets\fP()  reads the message \fImessage_number\fP, in set \fIset_number\fP,
-from the message catalog identified by \fIcatalog\fP, where \fIcatalog\fP is a
-catalog descriptor returned from an earlier call to \fBcatopen\fP(3).  The
-fourth argument, \fImessage\fP, points to a default message string which will
-be returned by \fBcatgets\fP()  if the identified message catalog is not
-currently available.  The message\-text is contained in an internal buffer
-area and should be copied by the application if it is to be saved or
-modified.  The return string is always terminated with a null byte.
+\fBcatgets\fP()  は catalog で指定されたメッセージカタログから、 セット \fIset_number\fP のメッセージ
+\fImessage_number\fP を読み取る。 \fIcatalog\fP は、 \fBcatopen\fP(3)  の呼び出しによって得られたカタログ
+ディスクリプタを指定する。 4番目の引数 \fImessage\fP は、指定のメッセージカタログが現在利用できない 場合に \fBcatgets\fP()
+が返すデフォルトのメッセージを指す。 メッセージテキストは内部のバッファ領域に格納されており、
+保存や変更を行う場合にはアプリケーション側でコピーする必要がある。 返される文字列は常にヌル文字で終端される。
 .SH 返り値
 .LP
 成功した場合、 \fBcatgets\fP()  は内部のバッファ領域へのポインタを返す。 ここにはヌル文字で終端されたメッセージ文字列が格納されている。
index 1be0c23..f8e80a6 100644 (file)
@@ -82,7 +82,7 @@ POSIX.1\-2001.  定数 \fBMCLoadBySet\fP と \fBMCLoadAll\fP に対応するソ
 以上は POSIX.1\-2001 における説明である。 glibc では \fBNL_CAT_LOCALE\fP の値は 1 である (以下の
 \fBMCLoadAll\fP と比較のこと)。 デフォルトのパスは場合によって様々であるが、通常は \fI/usr/share/locale\fP
 以下のファイルが調べられる。
-.SS "Linux notes"
+.SS "Linux における注意"
 これらの関数は libc.so.4.4.4c 以降で使用可能である。 linux の libc4 と libc5 においては、カタログディスクリプタ
 \fInl_catd\fP は \fBmmap\fP(2)  されたメモリの領域であってファイルディスクリプタではない。 \fBcatopen\fP()  の
 \fIflag\fP は、 \fBMCLoadBySet\fP (=0) か \fBMCLoadAll\fP (=1) のどちらかである。
index b230b27..8b13cca 100644 (file)
@@ -144,8 +144,7 @@ main(int argc, char *argv[])
 \fBldd\fP(1), \fBobjdump\fP(1), \fBreadelf\fP(1), \fBdlopen\fP(3), \fBelf\fP(5),
 \fBld.so\fP(8)
 
-\fIExecutable and Linking Format Specification\fP, available at various
-locations online.
+オンラインのいろいろな場所で入手できる \fIExecutable and Linking Format Specification\fP
 .SH この文書について
 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
index deead67..1fd6a3a 100644 (file)
@@ -160,7 +160,7 @@ C99 と POSIX.1\-2008 では \fBFLT_ROUNDS\fP という識別子が規定され
 .SH 準拠
 IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1\-2001.
 .SH 注意
-.SS "Glibc notes"
+.SS "glibc での注意"
 可能な場合には、GNU C Library はマクロ \fBFE_NOMASK_ENV\fP
 を定義する。このマクロはすべての例外でトラップが生じるような環境を表す。 \fB#ifdef\fP を使ってこのマクロをテストできる。これは
 \fB_GNU_SOURCE\fP が定義されている場合に限って定義される。 C99 標準は浮動小数点マスク (例えば特定のフラグでのトラップなど)
diff --git a/release/man3/malloc_info.3 b/release/man3/malloc_info.3
new file mode 100644 (file)
index 0000000..d211f37
--- /dev/null
@@ -0,0 +1,238 @@
+.\" Copyright (c) 2012 by 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
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MALLOC_INFO 3 2012\-04\-28 GNU "Linux Programmer's Manual"
+.SH 名前
+malloc_info \- export malloc state to a stream
+.SH 書式
+.nf
+\fB#include <malloc.h>\fP
+.sp
+\fBint malloc_info(int \fP\fIoptions\fP\fB, FILE *\fP\fIfp\fP\fB);\fP
+.fi
+.SH 説明
+The \fBmalloc_info\fP()  function exports an XML string that describes the
+current state of the memory\-allocation implementation in the caller.  The
+string is printed on the file stream \fIfp\fP.  The exported string includes
+information about all arenas (see \fBmalloc\fP(3)).
+
+As currently implemented, \fIoptions\fP must be zero.
+.SH 返り値
+\fBmalloc_info\fP() は成功すると 0 を返す。エラーの場合は \-1 を返す。
+.SH エラー
+.TP 
+\fBEINVAL\fP
+\fIoptions\fP was nonzero.
+.SH バージョン
+\fBmalloc_info\fP() は glibc バージョン 2.10 で追加された。
+.SH 準拠
+この関数は GNU による拡張である。
+.SH 注意
+The memory\-allocation information is provided as an XML string (rather than
+a C structure)  because the information may change over time (according to
+changes in the underlying implementation).  The output XML string includes a
+version field.
+
+The \fBopen_memstream\fP(3)  function can be used to send the output of
+\fBmalloc_info\fP()  directly into a buffer in memory, rather than to a file.
+
+The \fBmalloc_info\fP()  function is designed to address deficiencies in
+\fBmalloc_stats\fP(3)  and \fBmallinfo\fP(3).
+.SH 例
+The program below takes up to four command\-line arguments, of which the
+first three are mandatory.  The first argument specifies the number of
+threads that the program should create.  All of the threads, including the
+main thread, allocate the number of blocks of memory specified by the second
+argument.  The third argument controls the size of the blocks to be
+allocated.  The main thread creates blocks of this size, the second thread
+created by the program allocates blocks of twice this size, the third thread
+allocates blocks of three times this size, and so on.
+
+The program calls \fBmalloc_info\fP()  twice to display the memory\-allocation
+state.  The first call takes place before any threads are created or memory
+allocated.  The second call is performed after all threads have allocated
+memory.
+
+In the following example, the command\-line arguments specify the creation of
+one additional thread, and both the main thread and the additional thread
+allocate 10000 blocks of memory.  After the blocks of memory have been
+allocated, \fBmalloc_info\fP()  shows the state of two allocation arenas.
+.in +4
+.nf
+
+$ \fBgetconf GNU_LIBC_VERSION\fP
+glibc 2.13
+$ \fB./a.out 1 10000 100\fP
+============ Before allocating blocks ============
+<malloc version="1">
+<heap nr="0">
+<sizes>
+</sizes>
+<total type="fast" count="0" size="0"/>
+<total type="rest" count="0" size="0"/>
+<system type="current" size="135168"/>
+<system type="max" size="135168"/>
+<aspace type="total" size="135168"/>
+<aspace type="mprotect" size="135168"/>
+</heap>
+<total type="fast" count="0" size="0"/>
+<total type="rest" count="0" size="0"/>
+<system type="current" size="135168"/>
+<system type="max" size="135168"/>
+<aspace type="total" size="135168"/>
+<aspace type="mprotect" size="135168"/>
+</malloc>
+
+============ After allocating blocks ============
+<malloc version="1">
+<heap nr="0">
+<sizes>
+</sizes>
+<total type="fast" count="0" size="0"/>
+<total type="rest" count="0" size="0"/>
+<system type="current" size="1081344"/>
+<system type="max" size="1081344"/>
+<aspace type="total" size="1081344"/>
+<aspace type="mprotect" size="1081344"/>
+</heap>
+<heap nr="1">
+<sizes>
+</sizes>
+<total type="fast" count="0" size="0"/>
+<total type="rest" count="0" size="0"/>
+<system type="current" size="1032192"/>
+<system type="max" size="1032192"/>
+<aspace type="total" size="1032192"/>
+<aspace type="mprotect" size="1032192"/>
+</heap>
+<total type="fast" count="0" size="0"/>
+<total type="rest" count="0" size="0"/>
+<system type="current" size="2113536"/>
+<system type="max" size="2113536"/>
+<aspace type="total" size="2113536"/>
+<aspace type="mprotect" size="2113536"/>
+</malloc>
+.fi
+.in
+.SS プログラムのソース
+.nf
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <malloc.h>
+#include <errno.h>
+
+static size_t blockSize;
+static int numThreads, numBlocks;
+
+#define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \e
+                        } while (0)
+
+static void *
+thread_func(void *arg)
+{
+    int j;
+    int tn = (int) arg;
+
+    /* The multiplier \(aq(2 + tn)\(aq ensures that each thread (including
+       the main thread) allocates a different amount of memory */
+
+    for (j = 0; j < numBlocks; j++)
+        if (malloc(blockSize * (2 + tn)) == NULL)
+            errExit("malloc\-thread");
+
+    sleep(100);         /* Sleep until main thread terminates */
+    return NULL;
+}
+
+int
+main(int argc, char *argv[])
+{
+    int j, tn, sleepTime;
+    pthread_t *thr;
+
+    if (argc < 4) {
+        fprintf(stderr,
+                "%s num\-threads num\-blocks block\-size [sleep\-time]\en",
+                argv[0]);
+        exit(EXIT_FAILURE);
+    }
+
+    numThreads = atoi(argv[1]);
+    numBlocks = atoi(argv[2]);
+    blockSize = atoi(argv[3]);
+    sleepTime = (argc > 4) ? atoi(argv[4]) : 0;
+
+    thr = calloc(numThreads, sizeof(pthread_t));
+    if (thr == NULL)
+        errExit("calloc");
+
+    printf("============ Before allocating blocks ============\en");
+    malloc_info(0, stdout);
+
+    /* Create threads that allocate different amounts of memory */
+
+    for (tn = 0; tn < numThreads; tn++) {
+        errno = pthread_create(&thr[tn], NULL, thread_func,
+                               (void *) tn);
+        if (errno != 0)
+            errExit("pthread_create");
+
+        /* If we add a sleep interval after the start\-up of each
+           thread, the threads likely won\(aqt contend for malloc
+           mutexes, and therefore additional arenas won\(aqt be
+           allocated (see malloc(3)). */
+
+        if (sleepTime > 0)
+            sleep(sleepTime);
+    }
+
+    /* The main thread also allocates some memory */
+
+    for (j = 0; j < numBlocks; j++)
+        if (malloc(blockSize) == NULL)
+            errExit("malloc");
+
+    sleep(2);           /* Give all threads a chance to
+                           complete allocations */
+
+    printf("\en============ After allocating blocks ============\en");
+    malloc_info(0, stdout);
+
+    exit(EXIT_SUCCESS);
+}
+.fi
+.SH 関連項目
+\fBmallinfo\fP(3), \fBmalloc\fP(3), \fBmalloc_stats\fP(3), \fBmallopt\fP(3),
+\fBopen_memstream\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。
index ddbc548..04fb7a6 100644 (file)
@@ -59,13 +59,10 @@ _XOPEN_SOURCE\ >=\ 600 || _POSIX_C_SOURCE\ >=\ 200112L
 .RE
 .ad
 .SH 説明
-\fBmq_receive\fP()  removes the oldest message with the highest priority from
-the message queue referred to by the descriptor \fImqdes\fP, and places it in
-the buffer pointed to by \fImsg_ptr\fP.  The \fImsg_len\fP argument specifies the
-size of the buffer pointed to by \fImsg_ptr\fP; this must be greater than the
-\fImq_msgsize\fP attribute of the queue (see \fBmq_getattr\fP(3)).  If \fImsg_prio\fP
-is not NULL, then the buffer to which it points is used to return the
-priority associated with the received message.
+\fBmq_receive\fP()  は、記述子 \fImqdes\fP で参照されるメッセージキューから最も高い優先度を持つ
+最も古いメッセージを削除し、そのメッセージを \fImsg_ptr\fP が指すバッファに格納する。 \fImsg_len\fP 引き数は、 \fImsg_ptr\fP
+が指すバッファの大きさを示す。この値はキューの \fImq_msgsize\fP 属性よりも大きくなければならない (\fBmq_getattr\fP(3)
+参照)。 \fImsg_prio\fP が NULL 以外の場合、 \fImsg_prio\fP が指すバッファに受信したメッセージの優先度が格納される。
 
 キューが空の場合、デフォルトでは、 \fBmq_receive\fP()  は、新しいメッセージが届くか、関数呼び出しがシグナルハンドラにより
 中断されるまで、停止 (block) する。 メッセージキュー記述 (message queue description) で
index a57f2c3..6d775f3 100644 (file)
@@ -74,9 +74,9 @@ Netlink メッセージが途切れておらず、かつ解釈可能な形の場
 .SH 関連項目
 \fBnetlink\fP(7)
 
+libnetlink に関しては
 .UR ftp://ftp.inr.ac.ru\:/ip\-routing\:/iproute2*
 .UE
-for libnetlink
 .SH この文書について
 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
index 7747d93..1f35826 100644 (file)
@@ -33,8 +33,8 @@
 .\"*******************************************************************
 .TH POSIX_MEMALIGN 3 2012\-03\-23 GNU "Linux Programmer's Manual"
 .SH 名前
-posix_memalign, aligned_alloc, memalign, valloc, pvalloc \- allocate aligned
-memory
+posix_memalign, aligned_alloc, memalign, valloc, pvalloc \- アラインメント
+されたメモリの割り当てを行う
 .SH 書式
 .nf
 \fB#include <stdlib.h>\fP
index 25970e6..9912810 100644 (file)
@@ -188,7 +188,7 @@ struct HEADNAME *headp;
 マクロ \fBLIST_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
 .PP
 マクロ \fBLIST_REMOVE\fP は要素 \fIelm\fP をリストから削除する。
-.SS "List example"
+.SS リストの例
 .nf
 LIST_HEAD(listhead, entry) head;
 struct listhead *headp;                 /* リストの先頭。*/
@@ -213,7 +213,7 @@ for (np = head.lh_first; np != NULL; np = np\->entries.le_next)
 while (head.lh_first != NULL)           /* 削除する。*/
     LIST_REMOVE(head.lh_first, entries);
 .fi
-.SS "Tail queues"
+.SS テールキュー
 テールキューの先頭には \fBTAILQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
 つはテールキューの最初の要素へのポインタであり、 もう 1 つはテールキューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
 任意の要素はテールキューを辿らずに削除できる。 新しい要素は既存の要素の後またはテールキューの先頭または末尾に追加できる。 \fBTAILQ_HEAD\fP
@@ -247,7 +247,7 @@ struct HEADNAME *headp;
 マクロ \fBTAILQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
 .PP
 マクロ \fBTAILQ_REMOVE\fP は要素 \fIelm\fP をテールキューから削除する。
-.SS "Tail queue example"
+.SS テールキューの例
 .nf
 TAILQ_HEAD(tailhead, entry) head;
 struct tailhead *headp;                 /* テールキューの先頭。*/
@@ -274,7 +274,7 @@ for (np = head.tqh_first; np != NULL; np = np\->entries.tqe_next)
 while (head.tqh_first != NULL)
     TAILQ_REMOVE(&head, head.tqh_first, entries);
 .fi
-.SS "Circular queues"
+.SS 循環キュー
 循環キューの先頭には \fBCIRCLEQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
 つは循環キューの最初の要素へのポインタであり、 もう 1 つは循環キューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
 任意の要素はキューを辿らずに削除できる。 新しい要素は、既存の要素の後または前、またはキューの先頭または末尾に追加できる。 A
@@ -310,7 +310,7 @@ struct HEADNAME *headp;
 マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の前に挿入する。
 .PP
 マクロ \fBCIRCLEQ_REMOVE\fP は要素 \fIelm\fP を循環キューから削除する。
-.SS "Circular queue example"
+.SS 循環キューの例
 .nf
 CIRCLEQ_HEAD(circleq, entry) head;
 struct circleq *headp;                  /* 循環キューの先頭。*/
index 907e6b1..43847cd 100644 (file)
@@ -70,8 +70,8 @@ _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTEND
 .SH 返り値
 エラーがなかった場合、 \fBrealpath\fP()  は \fIresolved_path\fP へのポインターを返す。
 
-Otherwise, it returns a NULL pointer, the contents of the array
-\fIresolved_path\fP are undefined, and \fIerrno\fP is set to indicate the error.
+それ以外の場合は、ヌル (NULL) ポインターが返り、配列 \fIresolved_path\fP の内容は不定となり、 \fIerrno\fP
+にエラーの内容を示す値がセットされる。
 .SH エラー
 .TP 
 \fBEACCES\fP
@@ -97,17 +97,17 @@ Otherwise, it returns a NULL pointer, the contents of the array
 \fBENOTDIR\fP
 パスのディレクトリ要素が、ディレクトリでない。
 .SH バージョン
-On Linux, this function appeared in libc 4.5.21.
+Linux では、この関数が登場したのは libc 4.5.21 である。
 .SH 準拠
 4.4BSD, POSIX.1\-2001.
 
 POSIX.1\-2001 では \fIresolved_path\fP が NULL の場合の動作は実装に依存するとしている。 POSIX.1\-2008
 では、このマニュアルページに書かれている動作が規定されている。
 .SH 注意
-In 4.4BSD and Solaris, the limit on the pathname length is \fBMAXPATHLEN\fP
-(found in \fI<sys/param.h>\fP).  SUSv2 prescribes \fBPATH_MAX\fP and
-\fBNAME_MAX\fP, as found in \fI<limits.h>\fP or provided by the
-\fBpathconf\fP(3)  function.  A typical source fragment would be
+4.4BSD と Solaris では、パス名の長さの上限は (\fI<sys/param.h>\fP の中にある)
+\fBMAXPATHLEN\fP である。SUSv2 では \fBPATH_MAX\fP と \fBNAME_MAX\fP が規定されており、 これらは
+\fI<limits.h>\fP で定義されているか、 \fBpathconf\fP(3)
+関数から得られる。以下のようなソースコードになっていることが多い。
 .LP
 .in +4n
 .nf
@@ -135,7 +135,7 @@ In 4.4BSD and Solaris, the limit on the pathname length is \fBMAXPATHLEN\fP
 \fBrealpath\fP() のプロトタイプ宣言は、 libc4 と libc5 では
 \fI<unistd.h>\fP にあるが、それ以外の環境ではいずれも
 \fI<stdlib.h>\fP にある。
-.SS "GNU extensions"
+.SS "GNU による拡張"
 If the call fails with either \fBEACCES\fP or \fBENOENT\fP and \fIresolved_path\fP is
 not NULL, then the prefix of \fIpath\fP that is not readable or does not exist
 is returned in \fIresolved_path\fP.
@@ -149,9 +149,8 @@ is returned in \fIresolved_path\fP.
 \fIresolved_path\ ==\ NULL\fP の機能を使うと、この設計上の問題を回避することができる。 この機能は POSIX.1\-2001
 では標準化されていないが、 POSIX.1\-2008 では標準化されている。
 .LP
-The libc4 and libc5 implementation contained a buffer overflow (fixed in
-libc\-5.4.13).  Thus, set\-user\-ID programs like \fBmount\fP(8)  needed a private
-version.
+libc4 と libc5 の実装はバッファ・オーバーフローの可能性を持っていた (libc\-5.4.13 で修正されたが)。したがって、
+\fBmount\fP(8)  のような set\-user\-ID されるプログラムでは、この関数相当の関数を自前で持つ必要があった。
 .SH 関連項目
 \fBreadlink\fP(2), \fBcanonicalize_file_name\fP(3), \fBgetcwd\fP(3), \fBpathconf\fP(3),
 \fBsysconf\fP(3)
index 24597bf..cf60ed8 100644 (file)
@@ -90,12 +90,10 @@ dn_comp, dn_expand \- レゾルバ・ルーチン
 .SH 説明
 これらの関数はインターネットのドメインネームサーバーに問い合わせ、 その応答を解釈する。
 .PP
-The \fBres_init\fP()  function reads the configuration files (see
-\fBresolv.conf\fP(5))  to get the default domain name, search order and name
-server address(es).  If no server is given, the local host is tried.  If no
-domain is given, that associated with the local host is used.  It can be
-overridden with the environment variable \fBLOCALDOMAIN\fP.  \fBres_init\fP()  is
-normally executed by the first call to one of the other functions.
+\fBres_init\fP()  関数は、デフォルトのドメイン名、検索順、ネームサーバー アドレスを得るために設定ファイル
+(\fBresolv.conf\fP(5) 参照) を読む。 もしサーバーが示されていなければローカルホストを試す。
+ドメインが示されていなければローカルホストに付けられたドメインを用いる。 環境変数 \fBLOCALDOMAIN\fP でオーバーライドできる。
+\fBres_init\fP()  は、後述する関数のどれかが最初に呼び出された時、その関数 から実行される。
 .PP
 \fBres_query\fP()  関数は、指定された \fItype\fP と \fIclass\fP の 完全修飾ドメイン名 (FQDN) \fIname\fP
 を、ネームサーバーへ問い合わせる。 応答は、呼び出した側によって用意される長さ \fIanslen\fP の \fIanswer\fP バッファーに残される。
index 5ee9270..79bb143 100644 (file)
@@ -30,7 +30,7 @@
 .\"*******************************************************************
 .TH SHM_OPEN 3 2009\-02\-25 Linux "Linux Programmer's Manual"
 .SH 名前
-shm_open, shm_unlink \- create/open or unlink POSIX shared memory objects
+shm_open, shm_unlink \- POSIX 共有メモリ・オブジェクトの作成/オープン/削除を行う
 .SH 書式
 \fB#include <sys/mman.h>\fP
 .br
index 7faba11..ae31acc 100644 (file)
@@ -65,12 +65,12 @@ charmap の定義そのものは第一カラムにキーワード \fBCHARMAP\fP
 この形式は複数の文字を定義する。これは複数バイト文字 (現在は実装されていない)  のみで有用である。
 .PP
 charmap の定義の最後の行は \fBEND CHARMAP\fP を置く。
-.SS "Symbolic names"
+.SS シンボル名
 文字の \fBシンボル名 (symbolic name)\fP は \fB共通文字集合(portable character set)\fP
 の文字のみを含んでいる。 この名前はかぎかっこ < > で挟む。 \fB<escape_char>\fP
 に続く文字はそれ自身として解釈される。例えば \fB<\e\e\e>>\fP のような文字列は \fB\e>\fP
 というシンボル名をかぎかっこで狭んで表現している。
-.SS "Character encoding"
+.SS 文字符号化
 符号化は以下の三つの形式のどれかで表す:
 .TP 
 \fI<escape_char>d<数字>\fP
index c0242c2..2869da9 100644 (file)
@@ -110,7 +110,7 @@ ISO\ 6429 端末 (下記参照) 以外で \fIend code\fP に使われる色を
 \fB*\fP.\fIextension\fP と同じ。 \fIextension\fP で終るすべてのファイルに使われる色を指定する。 ピリオドは拡張子に含まれ、
 \fBemacs\fP のバックアップファイル \fB~\fP のようなピリオドで始まらない拡張子を指定することができない点に注意すること。
 この形式は古いものと考えられている。
-.SS "ISO 6429 (ANSI) color sequences"
+.SS "ISO 6429 (ANSI) カラーシーケンス"
 最近のカラー表示可能な ASCII 端末の大部分は、 ISO 6429 (ANSI) カラーシーケンスを用いる。 \fBxterm\fP や広く使われている
 DEC VT100 クローンを含む カラー表示できない一般的な端末の多くは、 ISO 6429
 カラーコードを認識し、出力から実害なく削除するか、エミュレートする。 \fBls\fP は、カラー表示が有効であることを仮定し、ISO 6429
@@ -167,7 +167,7 @@ ISO 6429 カラーシーケンスは、セミコロンで区切られた数字
 .sp
 デフォルトの設定を完全に認識できない端末プログラムも少数存在する。 ディレクトリをリストした後にすべてのテキストがカラー表示されたなら、
 \fBNORMAL\fP と \fBFILE\fP のコードを通常の前景色と背景色のための数値コードに変更すること。
-.SS "Other terminal types (advanced configuration)"
+.SS "その他の端末タイプ (高度な設定)"
 カラー表示可能 (またはハイライト表示可能) だが、 異なるコードセットを使う端末 (あるいはプリンター!) を持っている場合でも、
 それに適した設定を作ることができる。 そのためには、 \fBLEFTCODE\fP, \fBRIGHTCODE\fP, \fBENDCODE\fP 定義を使う必要がある。
 .PP
@@ -180,7 +180,7 @@ rightcode の目的は、単に必要な打ち込む回数を減らす (さら
 \fB注意:\fP \fBENDCODE\fP が設定ファイルのグローバルセクションで定義されている場合、 ファイルの端末固有セクションで未定義にすることは
 \fIできない\fP。 これは、 \fBNORMAL\fP の定義が何も影響を及ぼさないことを意味する。 しかし、異なった \fBENDCODE\fP
 を指定することで同じ効果を得ることができる。
-.SS "Escape sequences"
+.SS エスケープシーケンス
 カラーシーケンスやファイル名の拡張子で制御文字やブランク文字を指定するために、 C 言語スタイルの \e エスケープ表記と \fBstty\fP スタイルの
 ^ 表記の両方を使うことができる。 C 言語スタイルの表記には以下の文字が含まれる。
 .sp
index f20c6ed..78cc5eb 100644 (file)
@@ -637,7 +637,7 @@ GNU 拡張であり、Linux カーネルが \fIp_flags\fP のメンバーにセ
 .TP 
 \fIp_flags\fP
 .\" .Bl -tag -width "PF_X" -compact
-This member holds a bit mask of flags relevant to the segment:
+このメンバはセグメントに関連するフラグのビットマスクを保持する:
 .RS 12
 .TP 
 .PD 0
@@ -1185,12 +1185,10 @@ typedef struct {
 unit) までのバイトオフセットである。 実行可能ファイルまたは共有オブジェクトの場合、 この値は再配置で影響を受ける格納単位の仮想アドレスである。
 .TP 
 \fIr_info\fP
-This member gives both the symbol table index with respect to which the
-relocation must be made and the type of relocation to apply.  Relocation
-types are processor specific.  When the text refers to a relocation entry's
-relocation type or symbol table index, it means the result of applying
-\fBELF[32|64]_R_TYPE\fP or \fBELF[32|64]_R_SYM\fP, respectively, to the entry's
-\fIr_info\fP member.
+このメンバは、再配置が行われなければならないシンボルテーブルインデックスと、 適用される再配置のタイプの両方を与える。
+再配置タイプはプロセッサ毎に異なる。 テキストが再配置エントリの再配置タイプ またはシンボルテーブルインデックスを参照している場合、 それぞれエントリの
+\fIr_info\fP メンバに対して、それぞれ \fBELF[32|64]_R_TYPE\fP と \fBELF[32|64]_R_SYM\fP
+を適用した結果を意味する。
 .TP 
 \fIr_addend\fP
 .\" .El
index ccd5dc7..c1e14b6 100644 (file)
@@ -27,7 +27,7 @@
 .\"*******************************************************************
 .TH LOCALE 5 2008\-06\-17 Linux "Linux User Manual"
 .SH 名前
-locale \- describes a locale definition file
+locale \- ロケール定義ファイル
 .SH 説明
 \fBロケール (locale)\fP 定義ファイルは \fBlocaledef\fP(1)  コマンドがバイナリのロケール・データベースに変換するのに
 必要な全ての情報を含んでいる。
index 5532804..01952ad 100644 (file)
@@ -1,7 +1,7 @@
-.\" -*- nroff -*-
 .\" Copyright (c) 1999, 2000 SuSE GmbH Nuernberg, Germany
 .\" Author: Thorsten Kukuk <kukuk@suse.de>
 .\"
+.\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
 .\" This program is free software; you can redistribute it and/or
 .\" modify it under the terms of the GNU General Public License as
 .\" published by the Free Software Foundation; either version 2 of the
 .\" General Public License for more details.
 .\"
 .\" You should have received a copy of the GNU General Public
-.\" License along with this program; see the file COPYING.  If not,
-.\" write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-.\" Boston, MA 02111-1307, USA.
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
 .\"
 .\"*******************************************************************
 .\"
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH NSCD.CONF 5 1999\-10\-01 GNU "Linux Programmer's Manual"
+.TH NSCD.CONF 5 2013\-02\-12 GNU "Linux Programmer's Manual"
 .SH 名前
 /etc/nscd.conf \- ネームサービスキャッシュデーモンの設定ファイル
 .SH 説明
@@ -30,7 +30,7 @@
 各行には「属性・値」または「属性・サービス・値」を指定する。 フィールドはスペース文字またはタブ文字で区切られる。 \(aq#\(aq (ナンバー記号)
 はコメントの始まりを表す。 この記号から行末までは nscd によって解釈されない。
 
-指定可能なサービスは \fIpasswd\fP, \fIgroup\fP, \fIhosts\fP である。
+指定可能なサービスは \fIpasswd\fP, \fIgroup\fP, \fIhosts\fP, \fIservices\fP, \fInetgroup\fP である。
 
 \fBlogfile\fP \fIdebug\-file\-name\fP
 .RS
@@ -39,7 +39,7 @@
 
 \fBdebug\-level\fP \fIvalue\fP
 .RS
-希望するデバッグレベルを設定する。
+希望するデバッグレベルを設定する。デフォルトは 0。
 .RE
 
 \fBthreads\fP \fInumber\fP
 スレッドをいくつ起動してリクエストを待つのかを指定する。 少なくとも 5 つのスレッドが常に作成される。
 .RE
 
+\fBmax\-threads\fP \fInumber\fP
+.RS
+スレッドの最大数を指定する。デフォルトは 32。
+.RE
+
 \fBserver\-user\fP \fIuser\fP
 .RS
 このオプションが設定されると、 nscd は root ではなく、この user として実行される。 (\-S パラメータにより)
 各ユーザー毎に別々のキャッシュが使われる場合、 このオプションは無視される。
 .RE
 
+\fBstat\-user\fP \fIuser\fP
+.RS
+統計情報の参照を許可するユーザを指定する。
+.RE
+
+\fBreload\-count\fP unlimited | \fInumber\fP
+.RS
+キャッシュされたエントリが使用されなかったときに、 削除される前に何回リロードされるかを設定する。デフォルトは 5。
+.RE
+
+\fBparanoia\fP \fI<yes|no>\fP
+.RS
+パラノイアモードを有効にする。 パラノイアモードでは nscd を定期的に再起動する。デフォルトは無効。
+.RE
+
+\fBrestart\-interval\fP \fItime\fP
+.RS
+パラノイアモードが有効で定期的に再起動する場合の、 再起動間隔を \fItime\fP 秒に設定する。デフォルトは 3600。
+.RE
+
 \fBenable\-cache\fP \fIservice\fP \fI<yes|no>\fP
 .RS
-指定した \fIservice\fP のキャッシュを有効または無効にする。
+指定した \fIservice\fP のキャッシュを有効または無効にする。デフォルトは無効。
 .RE
 
 \fBpositive\-time\-to\-live\fP \fIservice\fP \fIvalue\fP
 .RS
 指定した \fIservice\fP のキャッシュにあるネガティブエントリ (失敗した問い合わせ) の TTL (time\-to\-live) を設定する。
 \fIvalue\fP の単位は秒である。 システムデータベースにない UID (ユーザーID) で所有されるファイル (たとえば root で tar
-を展開した linux カーネルのソース) が少ないと、 顕著な性能の向上が見られる。
+を展開した Linux カーネルのソース) が少ないと、 顕著な性能の向上が見られる。
 キャッシュのコヒーレンス問題を少なくするために小さな値にすべきである。
 .RE
 
 \fBsuggested\-size\fP \fIservice\fP \fIvalue\fP
 .RS
-内部ハッシュテーブルの大きさを指定する。 効率を最適にするために \fIvalue\fP は素数にしておくべきである。
+内部ハッシュテーブルの大きさを指定する。 効率を最適にするために \fIvalue\fP は素数にしておくべきである。デフォルトは 211 である。
 .RE
 
 \fBcheck\-files\fP \fIservice\fP \fI<yes|no>\fP
 .RS
 指定した \fIservice\fP に関連するファイルの変更のチェックを有効または無効にする。 ファイルは \fI/etc/passwd\fP,
-\fI/etc/group\fP, \fI/etc/hosts\fP である。
+\fI/etc/group\fP, \fI/etc/hosts\fP である。デフォルトは有効。
 .RE
 
-\fBmax\-threads\fP \fIthreads\fP
-.RS
-開始するスレッドの最大数を指定する。
-.RE
-
-\fBstat\-user\fP \fIusername\fP
-.RS
-統計情報の参照を許可するユーザを指定する。
-.RE
-
-\fBreload\-count\fP unlimited | \fInumber\fP
-.RS
-キャッシュされたエントリが使用されなかったときに、 削除される前に何回リロードされるかを設定する。
-.RE
-
-\fBparanoia\fP \fI<yes|no>\fP
+\fBpersistent\fP \fIservice\fP \fI<yes|no>\fP
 .RS
-パラノイアモードを有効にする。 パラノイアモードでは nscd を定期的に再起動する。
+サーバの再起動の前後で \fIservice\fP のキャッシュ内容を保持する。 \fBparanoia\fP
+モードが有効の場合に便利である。デフォルトは保持しない。
 .RE
 
-\fBrestart\-interval\fP \fItime\fP
+\fBshared\fP \fIservice\fP \fI<yes|no>\fP
 .RS
-パラノイアモードが有効で定期的に再起動する場合の、 再起動間隔を \fItime\fP 秒に設定する。
+\fIservice\fP の nscd データベースのメモリ・マッピングをクライアント間で共有する。
+これにより、検索を実行する度にソケット経由でデーモンに問い合わせを 行わずに、直接データベースを検索できるようになる。デフォルトは共有しない。
 .RE
 
-\fBpersistent\fP \fIservice\fP \fI<yes|no>\fP
+\fBmax\-db\-size\fP \fIservice\fP \fIbytes\fP
 .RS
-サーバの再起動の前後で \fIservice\fP のキャッシュ内容を保持する。 \fBparanoia\fP モードが有効の場合に便利である。
+The maximum allowable size, in bytes, of the database files for the
+\fIservice\fP.  The default is 33554432.
 .RE
 
-\fBshared\fP \fIservice\fP \fI<yes|no>\fP
+\fBauto\-propagate\fP \fIservice\fP \fI<yes|no>\fP
 .RS
-\fIservice\fP の nscd データベースのメモリ・マッピングをクライアント間で共有する。
-これにより、検索を実行する度にソケット経由でデーモンに問い合わせを 行わずに、直接データベースを検索できるようになる。
+When set to \fIno\fP for \fIpasswd\fP or \fIgroup\fP service, then the \fI.byname\fP
+requests are not added to \fIpasswd.byuid\fP or \fIgroup.bygid\fP cache.  This can
+help with tables containing multiple records for the same ID.  The default
+is yes.  This option is valid only for services \fIpasswd\fP and \fIgroup\fP.
 .RE
 .SH 関連項目
 .\" .SH AUTHOR
 .\" was written by Thorsten Kukuk and Ulrich Drepper.
 \fBnscd\fP(8)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。
index 962b613..69e2149 100644 (file)
@@ -124,10 +124,9 @@ debug support; see \fBresolver\fP(3)).
 .TP 
 \fBrotate\fP
 .\" Since glibc 2.2
-sets \fBRES_ROTATE\fP in \fI_res.options\fP, which causes round\-robin selection of
-nameservers from among those listed.  This has the effect of spreading the
-query load among all listed servers, rather than having all clients try the
-first listed server first every time.
+\fI_res.options\fP に RES_ROTATE を設定する。リストされているネームサーバから選ぶときに、ラウンドロビン
+(round\-robin)
+選択を行わせる。リストされている全てのサーバで問い合わせの負荷を分散する効果があり、最初にリストされたサーバに全てのクライアントが毎回最初に問い合わせを行うわけではなくなる。
 .TP 
 \fBno\-check\-names\fP
 .\" since glibc 2.2
@@ -164,7 +163,7 @@ IPv4 と IPv6 の検索を並行して実行する。
 glibc は IPv6 と IPv4 の検索を順番に実行するようになる
 (名前解決処理が若干遅くなるというデメリットがある)。
 .TP 
-\fBsingle\-request\-reopen\fP (since glibc 2.9)
+\fBsingle\-request\-reopen\fP (glibc 2.9 以降)
 The resolver uses the same socket for the A and AAAA requests.  Some
 hardware mistakenly only sends back one reply.  When that happens the client
 system will sit and wait for the second reply.  Turning this option on
index 974313a..55bbaf7 100644 (file)
@@ -153,7 +153,7 @@ telnet          23/tcp
 \fBgetservent\fP(3), \fBsetservent\fP(3), \fBinetd.conf\fP(5), \fBprotocols\fP(5),
 \fBinetd\fP(8)
 
-Assigned Numbers RFC, most recently RFC\ 1700, (AKA STD0002).
+ポート番号の割り当てを定めている RFC (最新版は RFC\ 1700、別名 STD0002)
 .SH この文書について
 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
index 4fed491..16f3f01 100644 (file)
@@ -38,7 +38,7 @@
 .\"*******************************************************************
 .TH SLABINFO 5 2007\-09\-30 "" "Linux Programmer's Manual"
 .SH 名前
-/proc/slabinfo \- kernel slab allocator statistics
+/proc/slabinfo \- カーネル slab アロケータの統計
 .SH 書式
 \fBcat /proc/slabinfo\fP
 .SH 説明
index 332f17d..ab2b164 100644 (file)
@@ -1,16 +1,19 @@
-.\" This page is made available under the MIT license.
-.\"
 .\" This manpage has been automatically generated by docbook2man
 .\" from a DocBook document.  This tool can be found at:
 .\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
 .\" Please send any bug reports, improvements, comments, patches,
 .\" etc. to Steve Cheng <steve@ggi-project.org>.
+.\"
+.\" %%%LICENSE_START(MIT)
+.\" This page is made available under the MIT license.
+.\" %%%LICENSE_END
+.\"
 .\"*******************************************************************
 .\"
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH FUTEX 7 2002\-12\-31 Linux "Linux Programmer's Manual"
+.TH FUTEX 7 2012\-08\-05 Linux "Linux Programmer's Manual"
 .SH 名前
 futex \- 高速ユーザ空間ロック機構
 .SH 書式
@@ -19,9 +22,9 @@ futex \- 高速ユーザ空間ロック機構
 .fi
 .SH 説明
 .PP
-Linux カーネルは、ユーザ空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast Userspace
-muTexes"; 高速ユーザ空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex
-のような高度なロック機構の概念を 構築するのに役立っている。
+Linux カーネルは、ユーザ空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space
+mutexes"; 高速ユーザ空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex
+のような高度なロック機構の概念を構築するのに役立っている。
 .PP
 このページはすべての設計決定を記述するようにはなっておらず、 アプリケーションやライブラリの開発に関係することがらに限っている。
 実際にはプログラマの多くは直接は futex を扱わないが、その代わり futex に基づいて構築されたシステムライブラリ (例えば NPTL
@@ -76,11 +79,12 @@ futex の獲得を待つ、すなわち futex を "down" するには反対の
 このマニュアルページには \fBfutex\fP(2)  プリミティブの最も一般的な使用法が 記されている。これは決して唯一の使用法ではない。
 .SH 関連項目
 \fBfutex\fP(2)
-.PP
+
 \fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP (proceedings
 of the Ottawa Linux Symposium 2002), futex の使用例ライブラリ, futex\-*.tar.bz2
-<URL:ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/>.
+.UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
+.UE .
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。
index 512a247..cf9c3da 100644 (file)
@@ -35,7 +35,7 @@
 .\"*******************************************************************
 .TH HIER 7 2012\-08\-05 Linux "Linux Programmer's Manual"
 .SH 名前
-hier \- description of the file system hierarchy
+hier \- ファイルシステム階層の説明
 .SH 説明
 典型的な Linux system には以下のようなディレクトリがある (他にもたくさんのディレクトリがあるが):
 .TP 
index fde8d2e..525ae79 100644 (file)
@@ -87,7 +87,7 @@ _
 252    170     AA      ª      FEMININE ORDINAL INDICATOR
 253    171     AB      «      LEFT\-POINTING DOUBLE ANGLE QUOTATION MARK
 254    172     AC      ¬      NOT SIGN
-255    173     AD      ­      SOFT HYPHEN (shown as a hyphen at line breaks) [1]
+255    173     AD      ­      SOFT HYPHEN (改行時のハイフン) [1]
 256    174     AE      ®      REGISTERED SIGN
 257    175     AF      ¯      MACRON
 260    176     B0      °      DEGREE SIGN
index bc9237f..fa1f11e 100644 (file)
@@ -36,7 +36,7 @@
 .\"*******************************************************************
 .TH LOCALE 7 2008\-12\-05 Linux "Linux Programmer's Manual"
 .SH 名前
-locale \- description of multilanguage support
+locale \- 多言語サポートの解説
 .SH 書式
 .nf
 \fB#include <locale.h>\fP
index c44dc05..907ae5f 100644 (file)
@@ -45,12 +45,10 @@ the following order:
 .IP o
 (ELF のみ)  バイナリの動的セクション属性 DT_RUNPATH が存在すれば、 DT_RUNPATH で指定されたディレクトリを使用する。
 .IP o
-From the cache file \fI/etc/ld.so.cache\fP, which contains a compiled list of
-candidate libraries previously found in the augmented library path.  If,
-however, the binary was linked with the \fB\-z nodeflib\fP linker option,
-libraries in the default library paths are skipped.  Libraries installed in
-hardware capability directories (see below)  are preferred to other
-libraries.
+キャッシュファイル \fI/etc/ld.so.cache\fP を探す。このファイルは、 (ld.so.conf で追加指定されたものも含めた)
+ライブラリ検索パスから見つかったライブラリファイルの情報を集めたものである。ただし、バイナリがリンカオプション \fB\-z nodeflib\fP
+でリンクされている場合は、デフォルトのライブラリパスにある ライブラリはスキップされる。ハードウェア機能ディレクトリ (下記参照)
+にインストールされたライブラリは、他のライブラリよりも優先される。
 .IP o
 デフォルトパスである \fI/lib\fP、 次いで \fI/usr/lib\fP を用いる。 バイナリがリンカオプション \fB\-z nodeflib\fP
 でリンクされている場合、このステップはスキップされる。
@@ -134,9 +132,8 @@ mmx, mtrr, pat, pbe, pge, pn, pse36, sep, ss, sse, sse2, tm
 空文字列の場合、解決しなければならない関数呼び出しが 最初に参照された時点で解決する。 デバッガを使っているときに役立つ。
 .TP 
 \fBLD_LIBRARY_PATH\fP
-A colon\-separated list of directories in which to search for ELF libraries
-at execution\-time.  Similar to the \fBPATH\fP environment variable.  Ignored in
-set\-user\-ID and set\-group\-ID programs.
+コロン区切りのディレクトリのリスト。実行時に ELF ライブラリを検索するディレクトリを指定する。 \fBPATH\fP 環境変数と同じように指定する。
+set\-user\-ID/set\-group\-ID されたプログラムでは無視される。
 .TP 
 \fBLD_PRELOAD\fP
 A list of additional, user\-specified, ELF shared libraries to be loaded
@@ -243,9 +240,8 @@ set\-user\-ID/set\-group\-ID されたプログラムでは、 LD_PROFILE_OUTPUT
 されたプログラムでは、 この変数は無視される。
 .TP 
 \fBLD_VERBOSE\fP
-(glibc since 2.1)  If set to a nonempty string, output symbol versioning
-information about the program if \fBLD_TRACE_LOADED_OBJECTS\fP variable has
-been set.
+(glibc 2.1 以降) 空文字列でない場合に、\fBLD_TRACE_LOADED_OBJECTS\fP
+変数が設定されていれば、プログラムのシンボルバージョン情報を出力する。
 .TP 
 \fBLD_WARN\fP
 (ELF のみ)(glibc 2.1.3 以降)  空文字列でない場合、解決されていないシンボルがあれば警告を出す。
@@ -265,8 +261,7 @@ ELF の動的リンカ/ローダ
 ライブラリを検索するディレクトリを集めたリストと、 共有ライブラリの候補の整列リストを含むファイル。
 .TP 
 \fI/etc/ld.so.preload\fP
-File containing a whitespace\-separated list of ELF shared libraries to be
-loaded before the program.
+プログラムの前にロードすべき ELF 共有ライブラリを スペースで区切ったリストが書かれているファイル。
 .TP 
 \fBlib*.so*\fP
 共有ライブラリ