Nombre maximum de fichiers ouverts par processus

Nombre maximum de fichiers ouverts par processus - C - Programmation

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.

Reply

Marsh Posté le 28-10-2004 à 15:55:33   

Reply

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

Reply

Marsh Posté le 28-10-2004 à 16:41:39    

Malheureusement je ne crois pas qu'il y ait un équivalent à ulimit sous windows

Reply

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.

Reply

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.  
 
C run-time I/O now supports many more open files on Win32 platforms than in previous versions. Up to 2,048 files may be open simultaneously at the lowio level (that is, opened and accessed by means of the _open, _read, _write, and so forth family of I/O functions). Up to 512 files may be open simultaneously at the stdio level (that is, opened and accessed by means of the fopen, fgetc, fputc, and so forth family of functions). The limit of 512 open files at the stdio level may be increased to a maximum of 2,048 by means of the _setmaxstdio function.
 
Because stdio-level functions, such as fopen, are built on top of the lowio functions, the maximum of 2,048 is a hard upper limit for the number of simultaneously open files accessed through the C run-time library.


Sinon je me demande : comment tu fais pour te retrouver avec +2000 fichiers ouverts en même temps ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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  :pt1cable: , 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...


---------------
If I want to fail and succeed, which I have done ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed