在这个SO question和这个答案之后,似乎在 printf 之后调用 setrlimit 使它不起作用。
这是示例代码:
#include <stdio.h>
#include <sys/resource.h>
int main()
{
struct rlimit rlp;
FILE *fp[10000];
int i;
printf("Hello\n");
rlp.rlim_cur = 10000;
rlp.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_NOFILE, &rlp);
getrlimit(RLIMIT_NOFILE, &rlp);
printf("limit %lld %lld\n", rlp.rlim_cur, rlp.rlim_max);
for(i=0;i<10000;i++) {
fp[i] = fopen("a.out", "r");
if(fp[i]==0) { printf("failed after %d\n", i); break; }
}
}
这是控制台输出:
Hello
limit 10000 9223372036854775807
failed after 4861
如果我评论第一个printf
,这里是控制台输出:
limit 10000 9223372036854775807
failed after 9967
有什么理由吗?
[编辑] 我正在运行带有 Xcode 4.6.2 的 MAC OS X 10.7.5。