fclose und ferror



  • Hallo liebe Programmierer,

    Ich wundere mich immer wieder, über die ungemütlichen Abweichungen und Eigenarten zw. verschiedenen Implementierungen der Standardbibliothek.
    Insbesondere bei der Dateiarbeit.
    Inzwischen verwende ich übrigens gcc unter Ubuntu.
    Davon fstream zu verwenden, bin ich abgekommen, es gibt unglaubliche und unnachvollziehbare Speicherkonflikte, wenn man fstream in einer Dynamischen Bibliothek verwendet.

    Also FILE (das heißt die C-Variante). Funktioniert eigentlich ganz gut. Jetzt habe ich meine Bibliothek nach Linux portiert, und beobachte neue Fälle von Seltsamkeiten:

    if(fclose(m_pFile))
    		{
    			//Fehlerindikator 1
    			sgReport::ERROR("sgCommon::sgStream::COutFile::Exit",COULD_NOT_CLOSE,GetStringPath());
    		}
    		if(ferror(m_pFile))
    		{
                        //Fehlerindikator 2
    			perror("Error in Stream:");
    			sgReport::ERROR("sgCommon::sgStream::COutFile::Exit",COULD_NOT_CLOSE,GetStringPath());
    			clearerr(m_pFile);
    			return;
    		}
    

    manchmal ist fclose erfolgreich (fclose(<FILE>)==0), und trotzdem ist ferror!=0.
    Wenn ich aber perror("Error in Stream:"); anwende, gibt dieses mir aus:

    Error in Stream:: success

    Kann ich mich dann drauf verlassen, dass alles in Ordnung ist? vielleicht kriegt perror nur nix von diesem FILE mit. Es gab auch Fälle, in denen ferror(<File>)==0 war.

    Also ich habe bis jetzt verschiedene Dinge beobachtet, bei denen scheinbar alles in Ordnung war, die Standardbib aber Probleme suggeriert:

    fclose(...)==0, aber ferror(...)!=0 (siehe oben)
    fclose(...)!=0, aber ferror(...)==0 (früher, in MinGW mit DLLs unter Windows)

    hat jemand Tips, was man bei Dateiarbeit beachten muss? Vielleicht gibts auch Punkte, die mit dem Betriebsystem zusammenhängen...



  • kannst du nichtmal ins richtige subforum posten 😡



  • Wieso ist das falsch? es geht um die C Bibliothek.



  • weil mich :: blind macht.



  • Davon fstream zu verwenden, bin ich abgekommen, es gibt unglaubliche und unnachvollziehbare Speicherkonflikte, wenn man fstream in einer Dynamischen Bibliothek verwendet.

    Ziemlich gewagt, bei allen anderen fstream-Verwendern funktioniert das dann also nur zufällig richtig?
    ferror bezieht sich IMHO auf vorige LESE- oder SCHREIB-Operationen, fclose gehört nicht dazu.


Anmelden zum Antworten