Frage

Warum DOS / Windows und Mac entscheiden zu verwenden, \ r \ n und \ r für Zeile statt \ n endet? War es nur ein Ergebnis des Versuchs, „anders“ von Unix?

zu sein

Und jetzt, dass Mac OS X Unix (-ähnlichen), hat Apple-Schalter n \ r?

\
War es hilfreich?

Lösung

DOS geerbt CR-LF Zeilenende (was Sie \ r \ n anrufen, macht nur die ASCII-Zeichen explizit) von CP / M. CP / M geerbt von den verschiedenen Dezember Betriebssysteme, die CP / M-Designer Gary Kildall beeinflusst.

CR-LF verwendet wurde, so dass die Fernschreiber, den Druckkopf an den linken Rand (CR = Carriage Return) zurückkehren würde, und dann zu der nächsten Zeile (LF = Zeilenvorschub) bewegen.

Die Unix-Typen behandelt, dass in dem Gerätetreiber, und bei Bedarf LF nach CR-LF auf Ausgabe-Geräte übersetzt, die es benötigt.

Und wie Sie erraten, Mac OS X verwendet nun LF.

Andere Tipps

Wirklich Zugabe zu @ Mark Harrison ...

Die Menschen, die Ihnen sagen, dass Unix ist „nur den Text ausgibt, der Programmierer festgelegt“, während DOS sind gebrochen schlicht falsch. Es gibt auch behauptet, dass es für DOS-Flag EOF dumm ist, wenn es ein EOF-Zeichen sieht, was die Frage aufwirft, was genau das EOF-Zeichen ist für.

Es gibt keine wahre Konvention für Textdatei Zeilenende - nur plattformspezifischen Konventionen. Denn auch CR-LF, CR und LF sind nicht die einzigen Zeilenende Konventionen immer verwendet werden, und ASCII war nicht einmal der einzige Zeichensatz. Das Problem ist die C-Standardbibliothek und Laufzeit, die dieses plattformabhängigen Detail nicht abstrahieren tat. Andere dritte Generation Sprachen (wie Pascal und sogar Basic) schafften es, zumindest bis zu einem gewissen Grad. Aus diesem Grund, wenn C-Compiler für andere Plattformen geschrieben wurden, wurden Laufzeitbibliothek Hacks benötigt Kompatibilität zu erreichen, mit vorhandenen Quellcode und Bücher.

In der Tat ist es Unix und Multics, die String-Übersetzung ursprünglich für Konsole benötigt I / O, da die Benutzer in der Regel bei einem ASCII-Terminal saß, die CR LF Leitung erforderlich endet. Diese Übersetzung wurde in einem Gerätetreiber getan, obwohl -. Das Ziel der geräte Besonderheiten zu abstrahieren war unter der Annahme, dass es besser war es für gespeicherte Textdateien, eine Konvention und dabei zu bleiben nehmen

Der C Text-E / A-Hack ist im Prinzip ähnlich zu dem, was CygWin jetzt ist, Runtimes Linux Hacker so gut zu funktionieren wie unter Windows zu erwarten. Es ist eine wahre Geschichte von Hacking Dinge über sie in Unix-Doppelgänger drehen - aber dann gibt es auch Wein, Drehen Linux zu Windows. Merkwürdigerweise, können Sie etwas fehl am Platz Line-End-Kritik von Windows in der CygWin FAQ (Internet Archive Link hinzugefügt 2013 - die Seite existiert nicht mehr). Vielleicht ist es nur ihr Sinn für Humor, da sie im Grunde tun, was sie kritisieren, aber auf einem viel größeren Maßstab; -)

der Standardbibliothek ++ C (unabhängig Plattform auf seiner implementiert) vermeidet dieses Problem iostreams mit, die abstrahieren Linie endet. Für die Ausgabe, die mir gut passt. Für die Eingabe, ich brauche mehr Kontrolle, also entweder ich interpretieren Zeichen-für-Zeichen oder auch einen Scanner-Generator verwenden.

[ Bearbeiten Es stellt sich heraus, dass die durchgestrichenen aus Anspruch oben nicht wahr ist, und nie war. Die std::endl wörtlich übersetzt eine \n und einen Flush. Die \n ist genau die gleiche \n Sie in C erhalten - es neigt dazu, „neue Linie“ bekommen genannt, aber es ist eigentlich ein Vorschubzeichen ASCII-Linie, die dann durch die Laufzeit bei Bedarf übersetzt wird. Komisch, wie falsche Annahmen, so dass Sie sie nie in Frage tief verwurzelt bekommen - im Grunde, C ++ keine andere Wahl hatte zu tun, was C tat (andere als mehr Schichten auf dem Hinzufügen) aus Kompatibilitätsgründen, und dass immer offensichtlich sein sollte]

.

Das größte Stück Schuld von meinem POV ist mit C, aber C ist nicht das einzige Projekt zum Scheitern verurteilt seinen Umzug auf andere Plattformen zu antizipieren. Blaming Bill Gates ist nur Nüsse - alles, was er tat, war, kaufen und eine Variante des damals beliebten CP / M polieren. Wirklich, es ist nur Geschichte - aus dem gleichen Grund, warum wir nicht wissen, welche Zeichencodes 128 bis 255 beziehen sich auf in den meisten Textdateien. Angesichts der Leichtigkeit der mit allen drei Leitungsende Konventionen fertig zu werden, es ist seltsam, dass einige Entwickler immer noch darauf bestehen, dass „meine Plattformen Konvention ist der einzig wahre Weg, und ich werde es zwingen Sie es mögen oder nicht“ -Haltung.

Auch - wird der Unicode-Zeilentrenncodepunkt U + 2028 all diese Konventionen in Zukunft Textdateien ersetzen? ; -)

Es gibt einen recht langen Artikel über Zeilenende auf wikipedia. Die „Geschichte“ Abschnitt Antworten zumindest einen Teil Ihrer Frage: http://en.wikipedia.org/ wiki / Newline # Geschichte

Es ist interessant, die CRLF zu beachten ist so ziemlich der Internet-Standard. Das heißt, so ziemlich jedes Standard-Internet-Protokoll, das zeilenorientiert ist, verwendet CRLF. SMTP, POP, IMAP, NNTP, etc .. Der Körper der E-Mail besteht aus Linien, die durch CRLF beendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top