La limite par défaut pour les fichiers max ouverts sur Mac OS X est 256 (ulimit -n) et mon application nécessite environ 400 gestionnaires de fichiers.Comment augmenter la limite de "fichiers ouverts maximum" en C sous Mac OS X
J'ai essayé de changer la limite avec setrlimit() mais même si la fonction exécute correctement, je suis toujours limité à 256.
Voici le programme de test que j'utilise:
#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; }
}
}
et la sortie est:
before 256 -1
after 10000 -1
failed after 253
Je ne peux pas demander aux personnes qui utilisent mon application de piquer dans un fichier/etc ou quelque chose. J'ai besoin de l'application pour le faire par lui-même.
Pourquoi avez-vous besoin de tant de fichiers ouverts simultanément? – sbooth
Cela ne devrait pas être important, mais êtes-vous en train de tester ceci sur l'édition du serveur ou sur l'édition desktop d'OSX? Je peux m'imaginer que les gens d'Apple ont décidé de limiter le nombre de fichiers qu'une application de bureau pourrait ouvrir car l'ouverture de beaucoup est généralement une tâche orientée serveur ... –