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_curset to重试OPEN_MAX。例如,参见http://source.winehq.org/source/libs/wine/loader.c#L653。(提到 Leopard 的评论意味着 Leopard 首先引入了这种行为。将其阅读为 Leopard-and-later。)

ETA:请参阅setrlimit(2) 手册页中的 COMPATIBILITY 中的注释。

于 2012-04-04T21:50:12.840 回答