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 ファイルなどを突っ込むように頼むことはできません。それを自分で行うには、アプリケーションが必要です。