was ist der unterschied zwischen r und rb in fopen

Lesezeit: 4 Minuten

Benutzeravatar von StevenWang
Steven Wang

Ich habe versucht, fopen in C zu verwenden, der zweite Parameter ist der offene Modus. Die beiden Modi “r” und “rb” verwirren mich sehr. Es scheint, dass sie gleich sind. Aber manchmal ist es besser, “rb” zu verwenden. Also, warum existiert “r”? Erklären Sie es mir ausführlich oder mit Beispielen. Danke.

Du solltest benutzen "r" zum Öffnen von Textdateien. Unterschiedliche Betriebssysteme haben leicht unterschiedliche Möglichkeiten, Text zu speichern, und dies führt die korrekten Übersetzungen durch, sodass Sie nichts über die Eigenheiten des lokalen Betriebssystems wissen müssen. Sie werden zum Beispiel wissen, dass Zeilenumbrüche immer als einfach erscheinen "\n"unabhängig davon, wo der Code ausgeführt wird.

Du solltest benutzen "rb" wenn Sie Nicht-Textdateien öffnen, da in diesem Fall die Übersetzungen nicht angemessen sind.

  • Dies ist plattformabhängig. Unter Unix macht der Textmodus nichts Besonderes, also funktioniert er immer noch nicht \r\n wie \n.

    – C. K. Young

    1. Februar 2010 um 5:51 Uhr

  • Die Idee ist das "r" wird eine “Textdatei” auf demselben System korrekt öffnen. Wenn Sie eine Windows-Textdatei unter Linux mit öffnen "r"müssen Sie sich natürlich selbst um verschiedene Zeilenende-Konventionen kümmern.

    – Alok Singhal

    1. Februar 2010 um 6:00 Uhr

  • Wenn Sie eine in Windows geschriebene Datei auf einem Linux-System öffnen, sehen Sie das Verhalten. Sie müssen die Datei in eine Unix-Textdatei konvertieren. Das geht ganz einfach mit einem Programm namens dos2unixoder in vim, geben Sie nach dem Öffnen einer Datei Folgendes ein: :se ff=unixdrücken Sie die Eingabetaste und speichern Sie dann.

    – Alok Singhal

    1. Februar 2010 um 6:32 Uhr

  • Ja. Wie Alok sagt, "r" dient zum Öffnen von Textdateien, wie sie von den lokalen Gepflogenheiten definiert sind – dh zum Öffnen von Linux-Textdateien unter Linux, Windows-Textdateien unter Windows und OS/390-Textdateien unter OS/390. Wenn Sie Textdateien zwischen PCs verschieben, liegt es an Ihnen, sie in das native Format zu übersetzen.

    – Café

    1. Februar 2010 um 6:32 Uhr

  • @caf, alle meine Dateien und Operationen sind alle fenstertypisiert … Sie können my ausprobieren plus Beispiel…..

    – StevenWang

    1. Februar 2010 um 6:40 Uhr

Benutzeravatar von Alok Singhal
Alok Singhal

Unter Linux und Unix im Allgemeinen "r" und "rb" sind gleich. Genauer gesagt, a FILE Zeiger erhalten durch fopen()Das Speichern einer Datei im Textmodus und im Binärmodus verhält sich unter Unixen gleich. Unter Windows und im Allgemeinen auf Systemen, die mehr als ein Zeichen verwenden, um “Zeilenumbrüche” verhält sich eine im Textmodus geöffnete Datei so, als ob all diese Zeichen nur ein Zeichen wären, '\n'.

Wenn Sie Textdateien auf einem beliebigen System portabel lesen/schreiben möchten, verwenden Sie "r"und "w" in fopen(). Dadurch wird sichergestellt, dass die Dateien ordnungsgemäß geschrieben und gelesen werden. Wenn Sie eine Binärdatei öffnen, verwenden Sie "rb" und "wb"damit eine unglückliche Newline-Übersetzung Ihre Daten nicht durcheinander bringt.

Beachten Sie, dass eine Folge davon, dass das zugrunde liegende System die Zeilenumbruchübersetzung für Sie durchführt, darin besteht, dass Sie die Anzahl der Bytes, die Sie mit fseek(file, 0, SEEK_END) aus einer Datei lesen können, nicht bestimmen können.

Schließlich sehen Was ist der Unterschied zwischen Text- und Binär-E/A? an comp.lang.c FAQs.

  • Ich denke, dass es bei dieser Denkweise Vorbehalte geben kann. Das System, auf dem das Programm ausgeführt wird, kann Linux sein, aber die geöffnete Datei wurde möglicherweise an anderer Stelle erstellt. Stellen Sie sich vor, Sie schreiben einen Programmcode für einen Server. Auf dem Server selbst kann Linux ausgeführt werden, aber Endbenutzer, die die Dateien auf den Server hochladen, verwenden möglicherweise Windows. In diesem Fall können die Dateien enthalten \r\n oder \r Anstatt von \n. Am Ende macht der Inhalt der Datei selbst den Unterschied, nicht gerade das System.

    – Deutsch

    23. September 2021 um 13:25 Uhr

Verwenden Sie “rb”, um eine Binärdatei zu öffnen. Dann werden die Bytes der Datei beim Lesen nicht codiert

  • „r“ ist dasselbe wie „rt“ für Übersetzter Modus
  • “rb” ist der nicht übersetzte Modus.

Dies macht zumindest unter Windows einen Unterschied. Siehe diesen Link für Details.

Auf den meisten POSIX-Systemen wird es ignoriert. Aber überprüfen Sie Ihr System, um sicherzugehen.

XNU

Die Moduszeichenfolge kann auch den Buchstaben ‘b’ entweder als letztes Zeichen oder als Zeichen zwischen den Zeichen in irgendeiner der oben beschriebenen Zwei-Zeichen-Zeichenfolgen enthalten. Dies dient ausschließlich der Kompatibilität mit ISO/IEC 9899:1990 („ISO C90“) und hat keine Auswirkung; das ‘b’ wird ignoriert.

Linux

Die Moduszeichenfolge kann auch den Buchstaben ‘b’ enthalten, entweder als letztes Zeichen oder als Zeichen zwischen den Zeichen in einer beliebigen der oben beschriebenen Zwei-Zeichen-Zeichenfolgen. Dies dient ausschließlich der Kompatibilität mit C89 und hat keine Auswirkung; das ‘b’ wird auf allen POSIX-konformen Systemen, einschließlich Linux, ignoriert. (Andere Systeme behandeln Textdateien und Binärdateien möglicherweise anders, und das Hinzufügen des ‘b’ kann eine gute Idee sein, wenn Sie I/O in eine Binärdatei ausführen und erwarten, dass Ihr Programm in Nicht-UNIX-Umgebungen portiert wird.)

1417400cookie-checkwas ist der unterschied zwischen r und rb in fopen

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

Privacy policy