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文件或其他内容。我需要应用程序自己完成。

最佳答案



两件事情。

1号哈哈。显然,您在Mac OS X的stdio中发现了一个错误。如果我修复程序/添加错误处理/等,并用open()syscall替换fopen(),我可以轻松达到10000的限制(这比我的10.6.3'OPEN_MAX限制10240低240 fds)

2号RTFM:man setrlimit。对于OPEN_MAX,必须特别处理最大打开文件的情况。

关于c - 如何在Mac OS X上的C中增加 “maximum open files”的限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3166783/

10-11 00:37