在以下代码中:
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上。
答案 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中的兼容性说明。