【发布时间】:2011-03-11 03:43:21
【问题描述】:
Mac OS X 上最大打开文件的默认限制是 256 (ulimit -n),我的应用程序需要大约 400 个文件处理程序。
我尝试使用 setrlimit() 更改限制,但即使函数执行正确,我仍然限制为 256。
这是我使用的测试程序:
#include <stdio.h>
#include <sys/resource.h>
main()
{
struct rlimit rlp;
FILE *fp[10000];
int i;
getrlimit(RLIMIT_NOFILE, &rlp);
printf("before %d %d\n", rlp.rlim_cur, rlp.rlim_max);
rlp.rlim_cur = 10000;
setrlimit(RLIMIT_NOFILE, &rlp);
getrlimit(RLIMIT_NOFILE, &rlp);
printf("after %d %d\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; }
}
}
输出是:
before 256 -1
after 10000 -1
failed after 253
我不能要求使用我的应用程序的人在 /etc 文件或其他内容中进行操作。我需要应用程序自行完成。
【问题讨论】:
-
为什么需要同时打开这么多文件?
-
没关系,但您是在服务器版还是 OSX 的桌面版上进行测试?我可以想象苹果人决定限制桌面应用程序可以打开多少文件,因为打开很多文件通常是面向服务器的任务......