Domyślnym limitem maksymalnych otwartych plików w systemie Mac OS X jest 256 (ulimit -n), a moja aplikacja potrzebuje około 400 programów do obsługi plików.Jak zwiększyć limit "maksymalnych otwartych plików" w C na Mac OS X
Próbowałem zmienić limit z setrlimit(), ale nawet wtedy, gdy funkcja wykonuje prawidłowo, nadal jestem ograniczona do 256.
Oto program testów używam:
#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; }
}
}
i wyjście to:
before 256 -1
after 10000 -1
failed after 253
Nie mogę prosić ludzi, którzy używają mojej aplikacji, do włożenia plików/etc. Potrzebuję aplikacji, aby zrobić to sama.
Dlaczego potrzebujesz tak wielu plików otwartych jednocześnie? – sbooth
Nie to powinno mieć znaczenie, ale czy testujesz to w wydaniu na serwerze lub na desktopowej wersji OSX? Mogę sobie wyobrazić, że ludzie z jabłek postanowili ograniczyć liczbę plików, które może otworzyć aplikacja komputerowa, ponieważ otwieranie wielu jest zwykle zadaniem zorientowanym na serwer ... –