2 votes

fopen ne traite pas plus de 60 fichiers en même temps

J'ai besoin d'avoir plus de 60 fichiers texte ouverts en même temps dans mon programme en C. Cependant, il semble que fopen ne soit pas en mesure de gérer plus de 60 fichiers simultanément. Je programme dans l'environnement Windows.

J'utilise l'instruction fopen suivante :

fopen(fileName.c_str(),"wt");

Où fileName est le chemin de mon fichier txt, nom qui change dans une boucle le long de 100 fichiers. Quelqu'un connaît-il une astuce pour que cela fonctionne ? Ou une alternative ?

2voto

Paul Evans Points 8997

Si vous utilisez la commande shell bash :

ulimit -n

vous verrez que 60 est votre limite pour les poignées de fichiers ouverts. Vous pouvez la changer avec :

ulimit -n 256

Note : il y a des soft ( -S ) et durs ( -H ) limites que vous pouvez voir avec -Sn y -Hn vous pouvez modifier votre limite souple jusqu'à votre limite stricte.

2voto

Tom Tanner Points 4148

Il y a en fait deux qui limitent le nombre de fichiers que vous pouvez avoir ouverts à un moment donné :

  1. La limite de l'environnement spécifiée par ulimit -n .
  2. La bibliothèque d'exécution C. J'en connais plusieurs qui vous limitent à 256 poignées de fichiers (Sun pour en citer une).

Votre limite actuelle est probablement de 63 si l'on prend en compte les STDIN, STDOUT et STDERR déjà ouvertes, et je ne connaître d'un système qui va aussi bas, donc c'est probablement votre ulimit mais vous devez être conscient de l'autre limite.

Sous Windows, vous pouvez utiliser _setmaxstdio(n) mais dans le cas par défaut, vous devriez toujours être en mesure d'ouvrir 512 fichiers. je suis donc toujours un peu confus quant à la raison pour laquelle vous n'obtenez que 60 impairs à moins que vous n'ouvriez chaque fichier environ 8 fois....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X