Soweit ich weiß, kennzeichnet jedes Betriebssystem das Zeilenendezeichen (EOL) auf unterschiedliche Weise. Kommerzielle Betriebssysteme verwenden den Wagenrücklauf für EOL (Wagenrücklauf und Zeilenvorschub unter Windows, Wagenrücklauf nur unter Mac). Linux verwendet dagegen nur den Zeilenvorschub für EOL.
Warum verwendet Linux keinen Wagenrücklauf für EOL (und stattdessen nur Zeilenvorschub)?
Antworten:
Windows verwendet, CRLFweil es es von MS-DOS geerbt hat.
MS-DOS wird verwendet, CRLFweil es von CP / M inspiriert wurde, das bereits verwendet wurde CRLF.
CP / M und viele Betriebssysteme aus den achtziger Jahren und früher wurden verwendet, CRLFweil dies der Weg war, eine auf einem Teletyp gedruckte Zeile zu beenden (zum Zeilenanfang zurückkehren und zur nächsten Zeile springen, genau wie bei normalen Schreibmaschinen). Dies vereinfachte das Drucken einer Datei, da weniger oder keine Vorverarbeitung erforderlich war. Es gab auch mechanische Anforderungen, die verhinderten, dass ein einzelnes Zeichen verwendet werden konnte. Es kann einige Zeit dauern, bis sich der Schlitten zurückbewegt und die Walze dreht.
Gnu / Linux wird verwendet, LFweil es ein Unix- Klon ist . 1
Unix verwendete ein einzelnes Zeichen. LFVon Anfang an war es ineffizient und uneindeutig, zwei Zeichen zu verwenden, um Platz zu sparen und zu einem kanonischen Zeilenende zu standardisieren. Diese Wahl wurde von Multics übernommen, das sie bereits 1964 verwendete. Speicher, Speicher, CPU-Leistung und Bandbreite waren sehr sparsam, sodass es sich lohnte, ein Byte pro Zeile einzusparen. Beim Drucken einer Datei konvertierte der Treiber den Zeilenvorschub (neue Zeile) in die Steuerzeichen, die vom Zielgerät benötigt werden.
LFwurde vorgezogen, CRweil letztere noch eine bestimmte Verwendung hatten. Durch Neupositionieren des gedruckten Zeichens an den Anfang derselben Zeile konnten bereits eingegebene Zeichen überschrieben werden.
Apple entschied sich zunächst auch ein einzelnes Zeichen zu verwenden , aber aus irgendeinem Grund nahm das andere: CR. Beim Wechsel zu einer BSD-Schnittstelle wurde auf umgestellt LF.
Diese Auswahl hat nichts mit der Tatsache zu tun, dass ein Betriebssystem kommerziell ist oder nicht.
1 Dies ist die Antwort auf Ihre Frage.
quelle
\n
unabhängig von einem bestimmten Ausgabegerät mit einem einzigen dargestellt .Der Wikipedia-Artikel über "Newline" führt die Wahl von NL als Zeilenabschluss (oder Trennzeichen) auf Multics im Jahr 1964 zurück. Leider enthält der Artikel nur wenige Quellenangaben, aber es gibt keinen Grund zu bezweifeln, dass dies richtig ist. Diese Auswahl bietet zwei offensichtliche Vorteile gegenüber CR-LF: Platzersparnis und Geräteunabhängigkeit.
Die Hauptalternative, CR-LF, stammt von den Steuercodes, die zum physischen Bewegen des Papierwagens auf einem Fernschreiber verwendet werden, wobei CR den Wagen in seine Ausgangsposition zurückbringt und LF die Papierrolle dreht, um die Druckposition um eins nach unten zu bewegen Linie. Die beiden Steuerzeichen erscheinen im ITA2-Code aus dem Jahr 1924, der anscheinend noch verwendet wird (siehe Wikipedia). anscheinend hat ITA2 sie der Murray-Variante des Baudot-Codes von 1901 entnommen.
Für jüngere Leser ist es erwähnenswert, dass es in der Mainframe-Tradition keinen Newline-Charakter gab. Vielmehr war eine Datei eine Folge von Datensätzen, die entweder eine feste Länge (oft 80 Zeichen, basierend auf Lochkarten) oder eine variable Länge hatten. Datensätze mit variabler Länge wurden normalerweise mit einer Zeichenzahl am Anfang jedes Datensatzes gespeichert. Wenn Sie eine Mainframe-Datei haben, die aus einer Folge von Datensätzen variabler Länge besteht, von denen jeder beliebigen binären Inhalt enthält, kann das verlustfreie Konvertieren in eine Datei im UNIX-Stil eine schwierige Konvertierung sein.
Linux war natürlich nur eine Neuimplementierung von Unix, und Unix hat viele seiner Designentscheidungen von Multics getroffen, so dass es so aussieht, als ob die Schlüsselentscheidung 1964 getroffen wurde.
quelle
Andere Antworten haben die Vererbungskette bis in die 1960er Jahre zurückverfolgt und Teletypen. Aber hier ist ein Aspekt, den sie nicht behandelt haben.
In den Tagen der Teletypen gab es Zeiten, in denen es wünschenswert war, etwas zu tun, das als überstrapaziert bezeichnet wurde. Das Überschreiben wurde manchmal verwendet, um ein Kennwort zu verdecken, da das Löschen des Kennworts einfach nicht möglich war. Ein anderes Mal wurde überstrichen, um ein Symbol zu erhalten, das nicht in der Schriftart enthalten war. Beispielsweise erzeugen der Buchstabe O und ein Schrägstrich ein neues Symbol.
Ein Überstreichen wurde durch Setzen eines Wagenrücklaufs ohne Zeilenvorschub erreicht, obwohl manchmal ein Rückschritt verwendet wurde. Aus diesem Grund entschieden sich die Unix-Leute gegen Wagenrücklauf als Zeilentrenner und entschieden sich stattdessen für Zeilenvorschub. Dies funktionierte auch gut zum Lesen von Texten, die unter Verwendung der CRLF-Konvention erstellt wurden. Der CR wird verschluckt und der LF wird zum Trennzeichen.
quelle
Während Sie die historische Frage in eine Frage nach der C - Sprache übersetzen könnte, dem Grund , dass Linux und alle POSIX-konforme oder POSIX-ish Systeme müssen verwenden
LF
(oder zumindest , was die C'\n'
Zeichen ist) als Newline ist eine Folge der Kreuzung der Anforderungen von C und POSIX. Während C erlaubt, dass sich "Textdateien" und "Binärdateien" unterscheiden (tatsächlich können Textdateien satzbasiert sein und aus einer Folge von Zeilendatensätzen bestehen, zusätzlich zu weniger exotischen Dingen wie dem'\n'
Übersetzen nach / vonCR
/LF
wie unter DOS / Windows ), POSIX schreibt vor, dass sich Text- und Binärmodus gleich verhalten. Dies ist vor allem der Grund, warum die Kommandozeilen-Tools mögencat
sind mächtig / nützlich; Das wäre viel weniger, wenn sie nur mit Binärdateien oder nur mit Text arbeiten würden, aber nicht mit beiden.quelle