Gibt es einen Grund, warum fopen () nach mehreren hundert Öffnen nicht funktioniert?

7

Hey, für diesen Codeabschnitt kommuniziert die Person, die das System geschrieben hat, Daten zwischen Prozessen, die Textdateien verwenden. Ich habe eine Schleife, die (in jeder Hinsicht) so aussieht:

%Vor%

Dies wird mehrere hundert Mal funktionieren, aber aus welchen Gründen auch immer, es wird NULL nach einer Weile zurückgeben, obwohl es den gleichen Dateipfad schon mehrere hundert Mal geöffnet hat! Ich habe doppelt überprüft, dass die Datei existiert und Daten enthält, wenn die fopen NULL zurückgibt, und habe versucht, eine Verzögerung / Wiederholung dort ohne Wirkung zu setzen.

Was können Sie sich vorstellen, dass dies verursachen würde?

    
Paul 23.08.2010, 16:35
quelle

5 Antworten

13

Sie treffen die Grenze für offene Datei- / Dateibeschreibungen für Ihr Betriebssystem. Es sollte für immer laufen, wenn Sie (pFile) in Ihrer Schleife fclose.

    
NG. 23.08.2010, 16:37
quelle
5

Sie möchten wirklich Ihre Rückgabecodes überprüfen. Ich vermute, dass perror / strerror mit dem richtigen errno melden würde, dass Sie Ihr Dateideskriptorlimit überschritten haben.

Versuchen Sie so etwas und sehen Sie, ob Sie eine gute Fehlermeldung erhalten.

%Vor%     
Paul Rubel 23.08.2010 16:50
quelle
2

Warum machst du es so? Zwei Möglichkeiten, damit umzugehen

%Vor%

oder Verschieben Sie den Aufruf fopen nach außerhalb der Schleife

%Vor%

Es ist nicht verwunderlich, dass Sie die Grenze des Betriebssystems für die Anzahl der geöffneten Dateien überschreiten, indem Sie in Ihrem Fall ständig fopen aufrufen ...

    
t0mm13b 23.08.2010 16:44
quelle
0

Versuchen Sie, zu zählen, wie oft die Datei geöffnet wurde, bevor sie fehlschlägt.

Es ist auch möglich, dass das Betriebssystem die Datei für einen Scan öffnet, der die fopen-Funktion blockiert und null zurückgibt, da die Datei nicht geöffnet werden konnte.

    
VerticalEvent 23.08.2010 16:37
quelle
0

Ich nehme an, ein Thread wird in dieser Schleife gestartet, und die Datei pFile wird an diesen Thread gesendet, so dass dieser Thread die Datei schließen kann.

nicht der beste Weg, um zu programmieren, und wenn Sie können, in die Verpackung der pFile in einem Smart / Shared-Zeiger, der fclose aufrufen, wenn die Referenzzahl auf Null fällt (schauen Sie sich das Design-Muster, wenn Sie nicht vertraut sind es).

einfach gesagt, Sie müssen sicherstellen, wer sogar den Zeiger auf die pFile Aufrufe fclose darauf (nicht fclose darauf aus dem Haupt-Thread, wenn ein anderer Thread muss daran arbeiten).

hoffe das hilft.

btw, das '' in der Datei , sagt mir, das ist C ++ - Code (Java hat kein '*' neben seinen Typen).

    
Eyal Lev 14.11.2016 09:45
quelle

Tags und Links