为什么BSD上的RLIMIT_NOFILE rlim_max为-1?

时间:2012-04-04 20:50:16

标签: macos bsd setrlimit

在以下代码中:

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上。

1 个答案:

答案 0 :(得分:1)

如果setrlimit失败,请在rlim_cur设置为OPEN_MAX的情况下再试一次。例如,请参阅http://source.winehq.org/source/libs/wine/loader.c#L653。 (提到Leopard的评论意味着Leopard首先引入了这种行为。将它读作Leopard-and-later。)

ETA:请参阅setrlimit(2) man page中的兼容性说明。