Nombre maximum de fichiers ouverts par processus - C - Programmation
Marsh Posté le 28-10-2004 à 16:23:58
y'a pas un équivalent a ulimit (UNIX)?
http://wwwcgi.rdg.ac.uk:8081/cgi-b [...] n/2/ulimit
Marsh Posté le 28-10-2004 à 16:41:39
Malheureusement je ne crois pas qu'il y ait un équivalent à ulimit sous windows
Marsh Posté le 28-10-2004 à 17:21:50
ben t'as qu'à y aller un peu plus doucement sur l'ouverture des fichiers... avec des techniques de bufferisation (genre stringstream) tu peux faire un compromis mémoire/fichier ... parce que bon, nous dis pas que tu écris 1Go dans chacun des 300 fichiers.
Marsh Posté le 28-10-2004 à 18:09:12
Citation : The _setmaxstdio function changes the maximum value for the number of files that may be simultaneously open at the stdio level. |
Sinon je me demande : comment tu fais pour te retrouver avec +2000 fichiers ouverts en même temps ?
Marsh Posté le 28-10-2004 à 18:31:19
+1 et encore +1.
Quel est ton compilateur ?
Sur mon compilo (C++Builder), il y a une limite très basse de 50 fichiers ouvrables simultanément ! Cette limite est "hard-coded", fichier _nfile.h : #define _NFILE_ 50 / fichier stdio.h : #define FOPEN_MAX (_NFILE_). A moins de recompiler la RTL , pas de soluces avec "fopen( )". Vérifie ces limites avec ton compilo.
La soluce consiste à appeler directement l'API Win32 et les fonctions :
CreateFile() / ReadFile/WriteFile() / CloseHandle() (CloseFile() ça aurait été trop simple !)...
Avec ces fonctions, tu ne sera plus limité que par l'OS et je pense qu'avec Win2000/XP, la limite se trouve bien au delà de 2000 fichiers par process.
Je sais qu'on est lourds, mais pourquoi ce besoin d'ouvrir tant de fichiers en même temps ? Y'a toujours des cas méga-particuliers...
Marsh Posté le 28-10-2004 à 15:55:33
Bonjour,
je voudrais savoir comment récupérer et modifier le nombre maximum de fichiers / handle pouvant être ouverts dans un processus Windows.
Je rencontre un problème avec une application :
Un des traitements requiert l'ouverture simultanée de quelques 300 fichiers, et ajouté à ça les fichiers déjà ouverts par l'appli elle-même,
ça plante car on dépasse une certain limite (~512 ???).
(le fopen renvoie NULL tant qu'on ne ferme pas un autre fichier).
Je pourrais modifier le traitement pour que les fichiers ne soient ouverts que un par un, mais ça allonge le temps de calcul considérablement, et compte tenu des contraintes d'utilisation, ça n'est pas envisageable.
L'idéal serait que je puisse augmenter temporairement le nombre max de fichiers pouvant être ouverts dans le processus.
Mais il n'existe pas de fonctions dans les lib standards pour ça.
Note : Je travaille sous Win2000 avec Visual C/C++ 6.0.
Windows fournit la fonction _setmaxstdio, mais ça ne résoud pas le problème.
Merci d'avance si quelqu'un a une piste.