OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man2 / getrlimit.2
index 54f6aac..4811143 100644 (file)
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH GETRLIMIT 2 2013\-02\-11 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated 1997-02-22, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated and Modified 2001-06-02, Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated and Modified 2001-08-18, Yuichi SATO
+.\" Updated and Modified 2002-08-25, Yuichi SATO
+.\" Updated and Modified 2004-01-17, Yuichi SATO
+.\" Updated and Modified 2004-12-30, Yuichi SATO
+.\" Updated and Modified 2005-09-10, Yuichi SATO
+.\" Updated and Modified 2005-10-11, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated and Modified 2005-10-27, Akihiro MOTOKI
+.\" Updated and Modified 2006-04-15, Akihiro MOTOKI, Catch up to LDP v2.29
+.\" Updated 2008-08-08, Akihiro MOTOKI, LDP v3.05
+.\" Updated 2008-10-13, Akihiro MOTOKI, LDP v3.11
+.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-07-22, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH GETRLIMIT 2 2015\-01\-22 Linux "Linux Programmer's Manual"
 .SH 名前
 getrlimit, setrlimit, prlimit \- 資源の制限を取得/設定する
 .SH 書式
@@ -115,19 +134,20 @@ struct rlimit {
 .TP 
 \fBRLIMIT_AS\fP
 .\" since 2.0.27 / 2.1.12
-プロセスの仮想メモリ (アドレス空間) の最大サイズ (バイト単位)。 この制限は \fBbrk\fP(2), \fBmmap\fP(2),
+プロセスの仮想メモリ (アドレス空間) の最大サイズ (バイト単位)。 この制限は \fBbrk\fP(2), \fBmmap\fP(2),
 \fBmremap\fP(2)  の呼び出しに影響し、この制限を超えた場合は エラー \fBENOMEM\fP で失敗する。 また自動的なスタック拡張にも失敗する
 (さらに \fBsigaltstack\fP(2)  を使った代替スタックを利用可能にしていなかった場合には、 \fBSIGSEGV\fP を生成してそのプロセスを
 kill する)。 この値は \fIlong\fP 型なので、32 ビットの \fIlong\fP 型を持つマシンでは、 この制限は最大で 2 GiB
 になるか、この資源が無制限になる。
 .TP 
 \fBRLIMIT_CORE\fP
-\fIcore\fP ファイルの最大サイズ。 0 の場合、core ファイルは生成されない。 0 以外の場合、このサイズより大きいダンプは切り詰められる。
+\fIcore\fP ファイルの最大サイズ (\fBcore\fP(5) 参照)。 0 の場合、core ファイルは生成されない。 0
+以外の場合、このサイズより大きいダンプは切り詰められる。
 .TP 
 \fBRLIMIT_CPU\fP
 CPU 時間の上限 (秒数)。プロセスがソフトリミットに達した場合に、
 \fBSIGXCPU\fP シグナルを送る。このシグナルに対するデフォルトの動作は、
-プロセスの終了である。ただし、シグナルをキャッチして、ハンドラがメイン
\83\97ã\83­ã\82»ã\82¹ã\81®çµ\82äº\86ã\81§ã\81\82ã\82\8bã\80\82ã\81\9fã\81 ã\81\97ã\80\81ã\82·ã\82°ã\83\8aã\83«ã\82\92ã\82­ã\83£ã\83\83ã\83\81ã\81\97ã\81¦ã\80\81ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cã\83¡ã\82¤ã\83³
 プログラムに制御を返すこともできる。プロセスが CPU 時間を使い続けた
 場合は、ハードリミットに達するまで 1 秒毎にプロセスに \fBSIGXCPU\fP を送り、
 ハードリミットに達すると \fBSIGKILL\fP を送る。
@@ -151,30 +171,42 @@ CPU 時間の上限 (秒数)。プロセスがソフトリミットに達した
 このプロセスが実行できる \fBflock\fP(2)  ロック数と \fBfcntl\fP(2)  リース数の合計値を制限する。
 .TP 
 \fBRLIMIT_MEMLOCK\fP
-RAM 内にロックできるメモリの最大バイト数。 実際には、この制限はシステムページサイズの最も近い倍数に 切り捨てて丸められる。 この制限は
+RAM å\86\85ã\81«ã\83­ã\83\83ã\82¯ã\81§ã\81\8dã\82\8bã\83¡ã\83¢ã\83ªã\83¼ã\81®æ\9c\80大ã\83\90ã\82¤ã\83\88æ\95°ã\80\82 å®\9fé\9a\9bã\81«ã\81¯ã\80\81ã\81\93ã\81®å\88¶é\99\90ã\81¯ã\82·ã\82¹ã\83\86ã\83 ã\83\9aã\83¼ã\82¸ã\82µã\82¤ã\82ºã\81®æ\9c\80ã\82\82è¿\91ã\81\84å\80\8dæ\95°ã\81« å\88\87ã\82\8aæ\8d¨ã\81¦ã\81¦ä¸¸ã\82\81ã\82\89ã\82\8cã\82\8bã\80\82 ã\81\93ã\81®å\88¶é\99\90ã\81¯
 \fBmlock\fP(2), \fBmlockall\fP(2), \fBmmap\fP(2)  の \fBMAP_LOCKED\fP 操作に影響する。 Linux
 2.6.9 以降では \fBshmctl\fP(2)  \fBSHM_LOCK\fP 操作にも影響する。 この操作は呼び出し元プロセスの実 (real) ユーザー
-ID にロックされる 共有メモリセグメント (\fBshmget\fP(2)  を参照) の合計バイト数の最大値を設定する。 \fBshmctl\fP(2)
+ID ã\81«ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\82\8b å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88 (\fBshmget\fP(2)  ã\82\92å\8f\82ç\85§) ã\81®å\90\88è¨\88ã\83\90ã\82¤ã\83\88æ\95°ã\81®æ\9c\80大å\80¤ã\82\92設å®\9aã\81\99ã\82\8bã\80\82 \fBshmctl\fP(2)
 \fBSHM_LOCK\fP によるロックは、 \fBmlock\fP(2), \fBmlockall\fP(2), \fBmmap\fP(2)  の
-\fBMAP_LOCKED\fP によって確立されるプロセス毎のメモリロックとは分けて数える。 1 つのプロセスはこの制限までのバイトをロックできる。
+\fBMAP_LOCKED\fP ã\81«ã\82\88ã\81£ã\81¦ç¢ºç«\8bã\81\95ã\82\8cã\82\8bã\83\97ã\83­ã\82»ã\82¹æ¯\8eã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\83­ã\83\83ã\82¯ã\81¨ã\81¯å\88\86ã\81\91ã\81¦æ\95°ã\81\88ã\82\8bã\80\82 1 ã\81¤ã\81®ã\83\97ã\83­ã\82»ã\82¹ã\81¯ã\81\93ã\81®å\88¶é\99\90ã\81¾ã\81§ã\81®ã\83\90ã\82¤ã\83\88ã\82\92ã\83­ã\83\83ã\82¯ã\81§ã\81\8dã\82\8bã\80\82
 この制限には 2 つの種類がある。 2.6.9 より前の Linux カーネル では、
-この制限は特権プロセスによってロックされるメモリの合計を制御していた。 Linux 2.6.9
-以é\99\8dã\81§ã\81¯ã\80\81ç\89¹æ¨©ã\83\97ã\83­ã\82»ã\82¹ã\81\8cã\83­ã\83\83ã\82¯ã\81\99ã\82\8bã\83¡ã\83¢ã\83ªã\81®å\90\88è¨\88ã\81«å\88¶é\99\90ã\81¯ã\81ªã\81\8fã\80\81 ä»£ã\82\8fã\82\8aã\81«ã\81\93ã\81®å\88¶é\99\90ã\81¯é\9d\9eç\89¹æ¨©ã\83\97ã\83­ã\82»ã\82¹ã\81\8cã\83­ã\83\83ã\82¯ã\81\99ã\82\8bã\83¡ã\83¢ã\83ªの合計に 適用されるようになった。
\81\93ã\81®å\88¶é\99\90ã\81¯ç\89¹æ¨©ã\83\97ã\83­ã\82»ã\82¹ã\81«ã\82\88ã\81£ã\81¦ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\82\8bã\83¡ã\83¢ã\83ªã\83¼ã\81®å\90\88è¨\88ã\82\92å\88¶å¾¡ã\81\97ã\81¦ã\81\84ã\81\9fã\80\82 Linux 2.6.9
+以é\99\8dã\81§ã\81¯ã\80\81ç\89¹æ¨©ã\83\97ã\83­ã\82»ã\82¹ã\81\8cã\83­ã\83\83ã\82¯ã\81\99ã\82\8bã\83¡ã\83¢ã\83ªã\83¼ã\81®å\90\88è¨\88ã\81«å\88¶é\99\90ã\81¯ã\81ªã\81\8fã\80\81 ä»£ã\82\8fã\82\8aã\81«ã\81\93ã\81®å\88¶é\99\90ã\81¯é\9d\9eç\89¹æ¨©ã\83\97ã\83­ã\82»ã\82¹ã\81\8cã\83­ã\83\83ã\82¯ã\81\99ã\82\8bã\83¡ã\83¢ã\83ªã\83¼の合計に 適用されるようになった。
 .TP 
 \fBRLIMIT_MSGQUEUE\fP (Linux 2.6.8 以降)
 呼び出し元プロセスの実ユーザー ID に対して、 POSIX メッセージキューのために確保できるバイト数の制限を指定する。 この制限は
-\fBmq_open\fP(3)  に対して適用される。 ユーザが作成した各々のメッセージキューのバイト数は
+\fBmq_open\fP(3)  ã\81«å¯¾ã\81\97ã\81¦é\81©ç\94¨ã\81\95ã\82\8cã\82\8bã\80\82 ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9få\90\84ã\80\85ã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82­ã\83¥ã\83¼ã\81®ã\83\90ã\82¤ã\83\88æ\95°ã\81¯
 以下の式により計算され、(そのキューが削除されるまでの間)  この制限の計算対象に含められる。
 .nf
 
-    bytes = attr.mq_maxmsg * sizeof(struct msg_msg *) +
-            attr.mq_maxmsg * attr.mq_msgsize
+    Linux 3.5 以降:
+        bytes = attr.mq_maxmsg * sizeof(struct msg_msg) +
+                min(attr.mq_maxmsg, MQ_PRIO_MAX) *
+                      sizeof(struct posix_msg_tree_node)+
+                                /* オーバーヘッド分 */
+                attr.mq_maxmsg * attr.mq_msgsize;
+                                /* メッセージデータ分 */
+
+    Linux 3.4 以前:
+        bytes = attr.mq_maxmsg * sizeof(struct msg_msg *) +
+                                /* オーバーヘッド分 */
+                attr.mq_maxmsg * attr.mq_msgsize;
+                                /* メッセージデータ分 */
 
 .fi
-ここで \fIattr\fP は \fImq_attr\fP 構造体であり、 \fBmq_open\fP(3)  の第 4 引き数として指定される。
+ここで \fIattr\fP は \fImq_attr\fP 構造体であり、 \fBmq_open\fP(3)  の第 4 引き数として指定される。 また、構造体
+\fImsg_msg\fP と \fIposix_msg_tree_node\fP はカーネル内部の構造体である。
 
-\fIsizeof(struct msg_msg\ *)\fP (Linux/i386 では 4 バイト) を含む最初の加数は、 ユーザーが長さ 0
-のメッセージを無制限に作れないこと保証している (このようなメッセージであっても、 記録のためのオーバーヘッドでシステムメモリを消費する)。
+上記の式での「オーバーヘッド」加算分は、実装において必要となるオーバーヘッドを考慮したものである。 また、これにより、ユーザーが長さ 0
+のメッセージを無制限に作れないことが保証される (このようなメッセージであっても、 記録のためのオーバーヘッドでシステムメモリーを消費する)。
 .TP 
 \fBRLIMIT_NICE\fP (Linux 2.6.12 以降, 下記の「バグ」の節も参照)
 \fBsetpriority\fP(2)  や \fBnice\fP(2)  を使って引き上げられるプロセスの nice 値の上限を指定する。 nice
@@ -182,13 +214,14 @@ ID にロックされる 共有メモリセグメント (\fBshmget\fP(2)  を参
 発生する。通常、負の値は特別な意味を持っているからである。 例えば、通常は \fBRLIM_INFINITY\fP の値は \-1 である)。
 .TP 
 \fBRLIMIT_NOFILE\fP
-このプロセスがオープンできるファイルディスクリプタ数の最大値より 1 大きい値を指定する。 (\fBopen\fP(2), \fBpipe\fP(2),
+このプロセスがオープンできるファイルディスクリプタ数の最大値より 1 大きい値を指定する。 (\fBopen\fP(2), \fBpipe\fP(2),
 \fBdup\fP(2)  などにより) この上限を超えようとした場合、エラー \fBEMFILE\fP が発生する (歴史的に、BSD ではこの上限は
 \fBRLIMIT_OFILE\fP という名前となっている)。
 .TP 
 \fBRLIMIT_NPROC\fP
 呼び出したプロセスの実ユーザー ID で作成できる最大プロセス数 (より正確には Linux ではスレッド数)。 この上限に達すると、
-\fBfork\fP(2)  はエラー \fBEAGAIN\fP で失敗する。
+\fBfork\fP(2)  はエラー \fBEAGAIN\fP で失敗する。 この上限値は、ケーパビリティ \fBCAP_SYS_ADMIN\fP か
+\fBCAP_SYS_RESOURCE\fP のどちらかを持つプロセスには適用されない。
 .TP 
 \fBRLIMIT_RSS\fP
 .\" As at kernel 2.6.12, this limit still does nothing in 2.6 though
@@ -234,6 +267,15 @@ Linux 2.6.23 以降では、この制限はプロセスのコマンドライン
 .\" commit c022a0acad534fd5f5d5f17280f6d4d135e74e81
 .\" Author: Jiri Slaby <jslaby@suse.cz>
 .\" Date:   Tue May 4 18:03:50 2010 +0200
+.\"
+.\"     rlimits: implement prlimit64 syscall
+.\"
+.\" commit 6a1d5e2c85d06da35cdfd93f1a27675bfdc3ad8c
+.\" Author: Jiri Slaby <jslaby@suse.cz>
+.\" Date:   Wed Mar 24 17:06:58 2010 +0100
+.\"
+.\"     rlimits: add rlimit64 structure
+.\"
 Linux 固有の \fBprlimit\fP() システムコールは、 \fBsetrlimit\fP() と \fBgetrlimit\fP
 の機能を合わせて拡張したものである。 このシステムコールを使って、任意のプロセスのリソース上限の設定と取得を行うことができる。
 
@@ -244,13 +286,13 @@ Linux 固有の \fBprlimit\fP() システムコールは、 \fBsetrlimit\fP() 
 の呼び出しが成功すると、 \fIresource\fP の直前のソフトリミットとハードリミットが \fIold_limit\fP が指す \fIrlimit\fP
 構造体に格納される。
 
-.\" FIXME this permission check is strange
+.\" FIXME this permission check is strange
 .\" Asked about this on LKML, 7 Nov 2010
 .\"     "Inconsistent credential checking in prlimit() syscall"
 \fIpid\fP 引き数は呼び出しの操作対象となるプロセス ID を指定する。 \fIpid\fP が 0
 の場合、呼び出しは呼び出し元プロセスに対して適用される。 自分以外のプロセスのリソースの設定と取得を行うためには、 呼び出し元プロセスが
-\fBCAP_SYS_RESOURCE\fP ケーパビリティを持っているか、 対象となるプロセスの実ユーザ ID、 実効ユーザ ID、 保存
-set\-user\-ID が呼び出し元プロセスの実ユーザ ID と一致し、 かつ、 対象となるプロセスの実グループ ID、 実効グループ ID、 保存
+\fBCAP_SYS_RESOURCE\fP ケーパビリティを持っているか、 対象となるプロセスの実ユーザー ID、 実効ユーザー ID、 保存
+set\-user\-ID が呼び出し元プロセスの実ユーザ ID と一致し、 かつ、 対象となるプロセスの実グループ ID、 実効グループ ID、 保存
 set\-group\-ID が呼び出し元プロセスの実グループ ID と一致していなければならない。
 .SH 返り値
 成功した場合、これらのシステムコールは 0 を返す。
@@ -258,7 +300,7 @@ set\-group\-ID が呼び出し元プロセスの実グループ ID と一致し
 .SH エラー
 .TP 
 \fBEFAULT\fP
-場所を指すポインタ引き数がアクセス可能なアドレス空間外を指している。
+場所を指すポインタ引き数がアクセス可能なアドレス空間外を指している。
 .TP 
 \fBEINVAL\fP
 \fIresource\fP で指定された値が有効でない。
@@ -266,12 +308,14 @@ set\-group\-ID が呼び出し元プロセスの実グループ ID と一致し
 \fIrlim\->rlim_cur\fP が \fIrlim\->rlim_max\fP よりも大きかった。
 .TP 
 \fBEPERM\fP
-特権のないプロセスがハードリミットを上げようとした。
-これを行うためには \fBCAP_SYS_RESOURCE\fP ケーパビリティが必要である。
-または、特権のないプロセスが \fBRLIMIT_NOFILE\fP ハードリミットを
-現在のカーネルの最大値 (\fBNR_OPEN\fP) 以上に増やそうとした。
-または、呼び出したプロセスが \fIpid\fP で指定されたプロセスのリミットを
-設定する許可を持っていなかった。
+非特権プロセスがハードリミットを増やそうとした。 この操作には \fBCAP_SYS_RESOURCE\fP ケーパビリティが必要である。
+.TP 
+\fBEPERM\fP
+呼び出し元がハードリミット \fBRLIMIT_NOFILE\fP を \fI/proc/sys/fs/nr_open\fP (\fBproc\fP(5) 参照)
+で定義される最大値より大きな値に増やそうとした。
+.TP 
+\fBEPERM\fP
+(\fBprlimit\fP()) 呼び出し元のプロセスが \fIpid\fP で指定されたプロセスの上限を設定する許可を持っていなかった。
 .TP 
 \fBESRCH\fP
 \fIpid\fP で指定された ID のプロセスが見つからなかった。
@@ -294,6 +338,9 @@ POSIX.1\-2001 には指定されていない。
 \fBfork\fP(2)  で作成された作成された子プロセスは、 親プロセスのリソース制限を継承する。 \fBexecve\fP(2)
 の前後でリソース制限は保存される。
 
+リソースのソフトリミットをそのプロセスが現在のリソース使用量より小さい値に設定することはできる
+(但し、そのプロセスはそれ以降そのリソースの使用量を増やすことができなくなる)。
+
 シェルのリソース制限は、シェルの組み込みコマンドである \fIulimit\fP (\fBcsh\fP(1)  では \fIlimit )\fP
 を使って設定することができる。 このシェルのリソース制限は、コマンドを実行してシェルが生成するプロセス に引き継がれる。
 
@@ -302,13 +349,10 @@ Linux 2.6.24 以降では、 プロセスのリソース上限は \fI/proc/[pid]
 
 古いシステムでは、 \fBsetrlimit\fP()  と同様の目的を持つ関数 \fBvlimit\fP()  が提供されていた。 後方互換性のため、glibc
 でも \fBvlimit\fP()  を提供している。 全ての新しいアプリケーションでは、 \fBsetrlimit\fP()  を使用すべきである。
+.SS "C ライブラリとカーネル ABI の違い"
+バージョン 2.13 以降では、 glibc の \fBgetrlimit\fP() と \fBsetrlimit\fP()
+のラッパー関数はもはや対応するシステムコールを呼び出さず、 代わりに「バグ」の節で説明されている理由から \fBprlimit\fP() を利用している。
 .SH バグ
-.\" FIXME prlimit() does not suffer
-.\" https://bugzilla.kernel.org/show_bug.cgi?id=5042
-.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=12201
-.\" Since versions 2.13, glibc has library implementations of
-.\" getrlimit() and setrlimit() that use prlimit() to work around
-.\" this bug.
 以前の Linux カーネルでは、プロセスがソフトまたはハード \fBRLIMIT_CPU\fP リミットに達した場合に送られる \fBSIGXCPU\fP と
 \fBSIGKILL\fP シグナルが、本来送られるべき時点の 1 (CPU) 秒後に送られてしまう。 これはカーネル 2.6.8 で修正された。
 
@@ -331,16 +375,42 @@ Linux 2.6.24 以降では、 プロセスのリソース上限は \fI/proc/[pid]
 .\" Subject: [PATCH 7/7] make RLIMIT_CPU/SIGXCPU per-process
 .\" Date: 2005-01-23 23:27:46 GMT
 .\" Tested Solaris 10, FreeBSD 9, OpenBSD 5.0
-.\" FIXME https://bugzilla.kernel.org/show_bug.cgi?id=50951
+.\" FIXME https://bugzilla.kernel.org/show_bug.cgi?id=50951
 Linux 2.6.12 以降では、 プロセスがその \fBRLIMIT_CPU\fP ソフトリミットに達し、 \fBSIGXCPU\fP
\81«å¯¾ã\81\97ã\81¦ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\81\8c設å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©を起動するだけでなく、 カーネルは 1 秒間ソフトリミットを増やす。 そのプロセスが
\81«å¯¾ã\81\97ã\81¦ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8c設å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼を起動するだけでなく、 カーネルは 1 秒間ソフトリミットを増やす。 そのプロセスが
 CPU 時間を消費し続けている限り、 ハードリミットに達するまで、この動作が繰り返される。 ハードリミットに達すると、その時点でプロセスは kill
 される。 他の実装では、上記のような \fBRLIMIT_CPU\fP ソフトリミットの変更は行われず、 おそらく Linux の動作は標準に準拠していない。
 移植性が必要なアプリケーションではこの Linux 固有の動作を前提にするのは避けるべきである。 Linux 固有の上限
 \fBRLIMIT_RTTIME\fP でも、 ソフトリミットに達した場合に同じ動作となる。
 
+.\"
 2.4.22 より前のカーネルでは、 \fIrlim\->rlim_cur\fP が \fIrlim\->rlim_max\fP より大きかった場合、
 \fBsetrlimit\fP()  での \fBEINVAL\fP エラーを検出できない。
+.SS "32 ビットプラットフォームにおける「大きな」リソース上限値の表現"
+.\" https://bugzilla.kernel.org/show_bug.cgi?id=5042
+.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=12201
+glibc の \fBgetrlimit\fP() と \fBsetrlimit\fP() ラッパー関数は、32 ビットプラットフォームであっても 64 ビットの
+\fIrlim_t\fP データ型を使用する。 しかし、 \fBgetrlimit\fP() と \fBsetrlimit\fP() システムコールで使用される
+\fIrlim_t\fP データ型は (32 ビットの) \fIunsigned long\fP である。 さらに、 2.6.36 より前の Linux では、
+カーネルは 32 ビットプラットフォームではリソース上限を \fIunsigned long\fP として表現している。 しかしながら、 32
+ビットデータ型は十分な大きさではない。 ここで最も関係がある上限値は \fBRLIMIT_FSIZE\fP である。
+この上限はファイルサイズの最大値であり、実用性の面からは、 この上限をファイルオフセットを表現するのに使用されている型、 つまり 64 ビットの
+\fBoff_t\fP (\fI_FILE_OFFSET_BITS=64\fP でコンパイルしたプログラムの場合)、 と同じ幅を持つ型、を使って表現すべきである。
+
+カーネルのこの制限に対する対策として、 プログラムがリソース上限を 32 ビットの \fIunsigned long\fP
+で表現できる値よりも大きな値に設定しようとした際には、 glibc の \fBsetrlimit\fP() ラッパー関数はこの上限値を黙って
+\fBRLIM_INFINITY\fP に変換していた。 言い換えると、指定されたリソース上限値は黙って無視されていた。
+
+この問題は Linux 2.6.36 での以下の主な変更により解決された。
+.IP * 3
+32 ビットプラットフォームであっても 64 ビットを使用するリソース上限の新しいカーネルでの表現方法の追加。
+.IP *
+リソース上限の引き数として 64 ビット値を取る \fBprlimit\fP() システムコールの追加。
+.PP
+.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12201
+バージョン 2.13 以降の glibc では、 \fBgetrlimit\fP() と \fBsetrlimit\fP()
+システムコールの制限に対する回避手段として、
+\fBsetrlimit\fP() と \fBgetrlimit\fP() を \fBprlimit\fP() を呼び出すラッパー関数として実装している。
 .SH 例
 以下のプログラムに \fBprlimit\fP() の使用例を示す。
 .PP
@@ -402,6 +472,6 @@ main(int argc, char *argv[])
 \fBshmctl\fP(2), \fBmalloc\fP(3), \fBsigqueue\fP(3), \fBulimit\fP(3), \fBcore\fP(5),
 \fBcapabilities\fP(7), \fBsignal\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。