Questo protocollo risale ai tempi dei teletypewriter. CR sta per "ritorno a capo" - il carattere di controllo CR ha riportato la testina di stampa ("carrello") alla colonna 0 senza far avanzare la carta. LF sta per "avanzamento riga": il carattere di controllo LF fa avanzare la carta di una riga senza muovere la testina di stampa. Quindi, se si desidera riportare la testina di stampa nella colonna zero (pronta per stampare la riga successiva) e far avanzare la carta (in modo che stampi su carta nuova), è necessario sia CR che LF.
Se vai ai vari documenti del protocollo Internet, come RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) o RFC 2616 (HTTP), vedrai che tutti specificano CR + LF come sequenza di terminazione della linea. Quindi la vera domanda non è "Perché CP / M, MS-DOS e Win32 usano CR + LF come terminatore di linea?" ma piuttosto "Perché altre persone hanno scelto di differire da questi documenti standard e di usare un altro terminatore di linea?"
Unix ha adottato LF semplice come sequenza di terminazione di linea. Se guardi le opzioni stty, vedrai che l'opzione onlcr specifica se un LF deve essere cambiato in CR + LF. Se si sbaglia questa impostazione, si ottiene il testo di scale, dove
each
line
begins
dove la riga precedente era stata interrotta. Quindi anche unix, se lasciato in modalità raw, richiede CR + LF per terminare le linee. Il CR implicito prima di LF è un'invenzione unix, probabilmente come economia, poiché consente di risparmiare un byte per riga.
L'antenato unix del linguaggio C portava questa convenzione nello standard del linguaggio C, che richiede solo "\ n" (che codifica LF) per terminare le linee, ponendo l'onere sulle librerie di runtime per convertire i dati di file grezzi in linee logiche.
Il linguaggio C ha anche introdotto il termine "newline" per esprimere il concetto di "terminatore di linea generico". Mi è stato detto che il comitato ASCII ha cambiato il nome del personaggio 0x0A in "newline" intorno al 1996, quindi il livello di confusione è stato aumentato ancora di più.
\r\n
. Viene anche utilizzato dalla maggior parte dei protocolli Internet basati su testo (ad es. SMTP, HTTP, ecc.) Per lo stesso motivo di Windows (ad es. Cronologia).