Keine O_BINARY- und O_TEXT-Flags in Linux?

Lesezeit: 3 Minuten

Bei der Verwendung von IO auf Systemebene unter Linux ist mir aufgefallen, dass der Compiler die O_RDONLY und O_RDWR Flaggen, aber es hatte keinerlei Ahnung von der Bedeutung der O_BINARY und O_TEXT Flaggen.

Ist das eine Linux-Sache?

  • Die Python-Dokumentation ist in diesem Fall selten. Die Konstanten stehen vor der Abschnittsbeschreibung. bit.ly/1MmFT51 So viele Leute würden lesen: „Diese Konstanten sind nur unter Unix verfügbar“ statt „Diese Konstanten sind nur unter Windows verfügbar“

    – Yucer

    16. März 2016 um 15:14 Uhr


Linux, und praktisch jede Art von Unix, unterscheidet nicht zwischen Binär- und Textdateien. Daher gibt es keine Standardkonstanten mit diesem Namen. Sie können die Konstanten unter Linux manuell auf Null setzen, wenn Sie sie aus Gründen der Portabilität in Ihren Code aufnehmen möchten.

http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2007-03/msg00147.html

  • Link kaputt. Versuchen Sie bitte, von diesem Link aus die wesentlichen Teile hinzuzufügen, damit wir auch dann verstehen können, was Sie meinen, wenn es nicht funktioniert

    – Cătălina Sirbu

    17. November 2020 um 11:29 Uhr

Es ist eine *nix Sache. *nix-Betriebssysteme führen keine automatische Zeilenvorschubkonvertierung für I/O auf “Text”-Dateien durch, daher würden die Flags O_TEXT und O_BINARY keinen Sinn machen.

  • Beantwortet die Frage, informiert und schult. Hut ab

    – Jay

    15. Mai 2016 um 13:31 Uhr

Auf der Ebene der Sprache C und ihrer Standardbibliothek gibt es so etwas nicht O_BINARY und O_TEXT Flaggen. Der Binär- oder Textmodus wird durch Hinzufügen von ausgewählt b Bezeichner des Modusparameters von fopen Funktion. Der Spezifizierer selbst wird natürlich von allen C-Implementierungen unterstützt, aber auf POSIX-Plattformen hat dieser Spezifizierer keine Wirkung: Per POSIX-Spezifikation ist der Textmodus derselbe wie der Binärmodus.

Es überrascht nicht, dass Sie, wenn Sie tiefer in die Ebene der nicht standardmäßigen plattformspezifischen Unix-E/A-Funktionen eintauchen, feststellen werden, dass sie keinerlei Kenntnis von dieser Text/Binär-Unterscheidung haben.

  • O_BINARY/O_TEXT sind Argumente für die open-Funktion, nicht für die fopen-Funktion. Der C-Standard definiert keine offene Funktion, aber Posix tut es, und Windows tut es auch. Allerdings muss nur Windows den Unterschied zwischen Text und Binär verstehen, also definiert nur Windows O_BINARY/O_TEXT. (Das finde ich schade).

    – Martin Bonner unterstützt Monika

    13. Oktober 2015 um 9:42 Uhr

Windows verwendet \r\n für Zeilenenden, Linux (und andere Unix-Äquivalente) verwenden nur \n. In Windows liefert Ihnen das Lesen von O_BINARY die Rohdaten, möglicherweise ungerade Zeilenenden und alles, während O_TEXT die Zeilenenden normalisiert, sodass Ihr C-Code nur ein einzelnes Zeichen sieht.

Unter Linux und Co. macht es keinen Sinn, zwischen Text und Binär zu unterscheiden, weil die Daten sowieso nur ein einziges Zeichen haben, also die Flags unnötig sind.

Unter Unix gibt es auf OS-Ebene keinen Unterschied zwischen Binär- und Textdatei. Textdateien haben nur einen eingeschränkten Inhalt. Das gilt auch für Windows, aber die von C verwendeten Konventionen für das Zeilenende sind die gleichen wie die von Unix, während Windows das CR/LF-Paar verwendet (und in einigen Kontexten eine explizite Dateiendemarkierung, aber die Behandlung von das war nicht einmal in den Systemprogrammen konsistent, als ich es das letzte Mal überprüft habe), daher ist eine Zuordnung erforderlich, um die von C vorgeschriebenen Konventionen zu respektieren.

1363650cookie-checkKeine O_BINARY- und O_TEXT-Flags in Linux?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy