fopen & Segmentation Fault



  • Hi,

    na, was die Modes angehen, schaue ich für sowas meist direkt in die Beschreibung der verwendeten Lib rein, hier die libc6: http://www.gnu.org/manual/glibc-2.2.5/html_mono/libc.html

    BTW, ist es unter Linux nicht ohnehin egal, ob ich "b" oder sonstwas angebe?! Linux nimmt doch ohnehin alles als Binärfile.

    Naja, wie ich vermutet habe, das Problem liegt an anderer Stelle und hat letzlich nichts mit dem Öffnen der Datei zu tun - nur dort kam eben die Fehlermeldung. Das Problem ist mittlerweile behoben.

    Danke für den Support



  • @jogix
    Ich glaub da liegst du falsch.
    Die b und t Moden unterschiden sich in der Interpretation des line end Symbols. Und das dürfte auch in Linux so sein.



  • Unter Linux (UNIX allgemein?) wird nicht zwischen bin-Datei und text-Datei unterschieden. Das 'b' wurde nur eingeführt, weil es eben Systeme (DOS, Windows) gibt, die diese Unterscheidung erfordern.



  • Nochmal: POSIX und ISO-C kennen kein t, und POSIX macht das b-Flag tatsächlich überflüssig. Also kannst Du unter Linux das b-Flag an- und abgeben, wie Du lustig bist. Zur Verdeutlichgung, was man da eigentlich macht, ist es trotzdem ganz hilfreich.



  • wie bekomme ich dann die lineend bei fgets hin wenn ich nicht im Textmode öffnen kann liest er doch die vorgegebene Anzahl Zeichen?



  • Ich verstehe zwar deinen Satz nicht so wirklich, aber fgets liest so lange Zeichen in den angegeben Puffer, bis (a) 'angegeben viele' Zeichen gelesen wurden, (b) ein '\n'[¹] auftritt oder (c) das Dateiende erreicht wird ((d) ein Lesefehler (-> ferror)).

    [¹]: '\n' ist unter Unix das Zeilenende. Kombinationen aus 2 Zeichen, wie in anderen Betriebssystemen üblich ist, braucht es nicht.



  • Du gibst die Antwort selbst

    ➡ im text mode möchte ich das a,b,c,d beachted wird
    ➡ im binaer mode möchte ich das a,c,d beachted wird

    Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output

    Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed.



  • PAD schrieb:

    Du gibst die Antwort selbst

    Die Antwort auf was?

    ➡ im text mode möchte ich das a,b,c,d beachted wird
    ➡ im binaer mode möchte ich das a,c,d beachted wird

    a,b,c,d?

    untranslated

    Es gibt keine verschiedenen Übersetzungsmodi in Unix. Alles Text.



  • :p Ok angekommen, durch die Unix Konvention Textzeilen nur mit \n abzuschließen sind die Translation nicht nötig, und somit
    die Modi auch nicht. :p

    a,b,c,d waren die von die vergebenen Unterpunkte in deiem Posting von 14:01



  • PAD schrieb:

    a,b,c,d waren die von die vergebenen Unterpunkte in deiem Posting von 14:01

    Oh Gott, da habe ich ja mal wieder richtig mitgedacht :).


Anmelden zum Antworten