Gibt es eine Begrenzung der Anzahl der geöffneten Dateien in Windows
Dann öffne ich eine Menge Dateien mit fopen() in VC++, aber nach einer Weile gelingt es nicht.
Gibt es eine Begrenzung für die Anzahl der Dateien, die gleichzeitig geöffnet werden können?
Ich nehme an, man startet eine neue Instanz von sich selbst (der Prozess), nachdem 2048 Dateien...
...oder haben eine separate ausführbare Datei, die enthält Ihre Datei-Operationen, die in ein textfile location als parameter (jede Zeile, die mit Betrieb und Speicherort der Datei) und arbeitet mit, sagen wir, 500 Dateien in einer Zeit.
Ressourcen sind immer begrenzt (was auch immer der computer und das Betriebssystem). Also natürlich gibt es eine Grenze. Die bessere Frage ist, wie eine Abfrage oder erhöhen Sie das limit.
...oder haben eine separate ausführbare Datei, die enthält Ihre Datei-Operationen, die in ein textfile location als parameter (jede Zeile, die mit Betrieb und Speicherort der Datei) und arbeitet mit, sagen wir, 500 Dateien in einer Zeit.
Ressourcen sind immer begrenzt (was auch immer der computer und das Betriebssystem). Also natürlich gibt es eine Grenze. Die bessere Frage ist, wie eine Abfrage oder erhöhen Sie das limit.
InformationsquelleAutor Jimmy J | 2009-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
C run-time libraries haben einen 512 limit für die Anzahl der Dateien, die gleichzeitig geöffnet sein können. Zu öffnen versuchen, mehr als die maximale Anzahl der Datei-Deskriptoren-oder Datei-streams bewirkt, dass das Programm abbricht. Verwenden
_setmaxstdio
um diese Zahl zu ändern. Mehr Informationen über diesen gelesen werden können hierAußerdem können Sie prüfen, ob Ihre windows-version unterstützt der oberen Grenze, die Sie versuchen, mit
_setmaxstdio
. Für weitere Informationen über_setmaxstdio
überprüfen hierInformationen zum Thema entsprechend VS 2015 finden hier
Auch: Es ist nicht möglich, _setmaxstdio über 2048 Dateien öffnen, zumindest nicht mit der aktuellen Windows-CRT. Wenn Sie mehr Dateien geöffnet, als dass Sie mit CreateFile (msdn.microsoft.com/en-us/library/aa363858.aspx) und im Zusammenhang mit Win32-Funktionen. Jedoch, ein design, das erfordert, dass viele Dateien geöffnet ist wahrscheinlich falsch...
Da die POSIX-ish _open () - Funktion ist auch ein CRT-Funktion, dies gilt auch für die Verwendung, sowie die stdio-Funktion fopen().
Ich möchte hervorheben, dass der Letzte Satz von @ephemient: ein design, was bedeutet, dass viele Dateien geöffnet ist wahrscheinlich falsch
InformationsquelleAutor stack programmer
Wenn Sie die standard C/C++ POSIX-Bibliotheken für Windows, die Antwort ist "ja", gibt es eine Grenze.
Interessanterweise, das limit kommt von der Art von C/C++ - Bibliotheken, die Sie verwenden.
Stieß ich mit den folgenden JIRA-thread (http://bugs.mysql.com/bug.php?id=24509) von MySQL. Sie wurden im Umgang mit dem gleichen problem über die Anzahl der geöffneten Dateien.
Jedoch, Paul DuBois erklärte, dass das problem effektiv beseitigt werden, in Windows mit ...
Natürlich, man könnte theoretisch große Anzahl von offenen Dateien durch die Verwendung einer Technik, ähnlich wie Datenbank-verbindungen-pooling, aber das hätte gravierende Auswirkungen auf die performance.
In der Tat, die Eröffnung einer großen Anzahl von Dateien könnte schlechtes design. Aber manche Situationen erfordern es. Zum Beispiel, wenn Sie eine Datenbank-server, die verwendet werden von tausenden von Benutzern oder Anwendungen, die der server unbedingt haben, öffnen Sie eine große Anzahl von Dateien (oder erleiden einen Leistungseinbruch, durch die Verwendung der Datei-Deskriptor-pooling-Techniken).
InformationsquelleAutor luiscolorado
Im Fall, jemand ist unklar, was die Grenze betrifft, ich glaube, dass dies ein pro-Prozess-Grenze und nicht system-weit.
Schrieb ich ein kleines test-Programm, um Dateien zu öffnen, bis es ausfällt. Es wird um 2045-Dateien, bevor er die (2045 + STDIN + STDOUT + STDERROR = 2048), dann verließ ich das öffnen und lief in einen anderen kopieren.
Das zweite Exemplar zeigte das gleiche Verhalten, das heißt, ich hatte mindestens 4096 Dateien gleichzeitig öffnen.
InformationsquelleAutor Drarok
Ja, es gibt Grenzen je nach der Zugriffsebene, die Sie verwenden, wenn openning die Dateien. Sie können
_getmaxstdio
zu finden, die Grenzen und die_setmaxstdio
zum ändern der Grenzen.InformationsquelleAutor Malcolm Post
Ich weiß nicht, wo Paulo habe, die Anzahl von.. In windows NT-basierten Betriebssystemen, die Anzahl von Datei-handles pro Prozess geöffnet ist grundsätzlich begrenzt durch physikalischen Speicher - es ist sicherlich in die Hunderttausende.
InformationsquelleAutor Larry Osterman
Ja, es gibt eine Grenze.
Die Grenze hängt von dem Betriebssystem und Speicher zur Verfügung.
In der alten D. O. S. wurde die Begrenzung 255 simultaneuously geöffneten Dateien.
In Windows XP, wird die Grenze höher (ich glaube, es ist von 2.048 wie bereits von MSDN).
InformationsquelleAutor Paulo Santos
Stieß auf das gleiche problem, aber mit Embarcadero C++-Builder in RAD Studio 10.2. Die C-Laufzeit, die Sache scheint sich nicht zu bieten
_getmaxstdio
oder_setmaxstdio
, aber einige Makros und Ihre Standard-limit ist viel niedriger als das, was hier gesagt für die anderen Laufzeiten:stdio.h:
_nfile.h:
50
die Standard-Grenze für MS-DOS?InformationsquelleAutor Thorsten Schöning