0

次のコードでは:

139     struct rlimit limit;
140 
141     method = "rlimit";
142     if (getrlimit(RLIMIT_NOFILE, &limit) < 0) {
143       perror("calling getrlimit");
144       exit(1);
145     }
146 
147     /* set the current to the maximum or specified value */
148     if (max_desired_fds)
149       limit.rlim_cur = max_desired_fds;
150     else {
151         limit.rlim_cur = limit.rlim_max;
152     }
153 
154     if (setrlimit(RLIMIT_NOFILE, &limit) < 0) {
155       perror("calling setrlimit");
156       exit(1);
157     }

setrlimit 行が失敗します (「setrlimit を呼び出しています」というエラーが表示されます)。さらに調査するlimit.rlim_maxと、-1 であり、有効な値ではないことがわかります。これはなぜでしょうか?これはMac OSX上にあります。

4

1 に答える 1

1

setrlimit失敗した場合は、 にrlim_cur設定して再試行してくださいOPEN_MAX。たとえば、http://source.winehq.org/source/libs/wine/loader.c#L653を参照してください。(Leopard に言及しているコメントは、Leopard が最初にその動作を導入したことを意味します。Leopard 以降と読んでください。)

ETA: setrlimit(2) man pageの COMPATIBILITY の注を参照してください。

于 2012-04-04T21:50:12.840 に答える