Этот протокол восходит ко временам телетайпов. CR означает «возврат каретки» - управляющий символ CR возвращает печатающую головку («каретка») в столбец 0 без продвижения бумаги. LF означает «перевод строки» - символ управления LF выдвигает бумагу на одну строку без перемещения печатающей головки. Поэтому, если вы хотите вернуть печатающую головку в нулевой столбец (готовый напечатать следующую строку) и продвинуть бумагу (чтобы она печаталась на свежей бумаге), вам понадобятся оба значения: CR и LF.
Если вы перейдете к различным документам интернет-протокола, таким как RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) или RFC 2616 (HTTP), вы увидите, что все они определяют CR + LF в качестве последовательность завершения строки. Таким образом, реальный вопрос не в том, «почему CP / M, MS-DOS и Win32 используют CR + LF в качестве ограничителя строки?» а скорее "Почему другие люди решили отличаться от этих стандартных документов и использовать какой-либо другой терминатор строки?"
Unix принял обычный LF в качестве последовательности завершения строки. Если вы посмотрите на параметры stty, то увидите, что параметр onlcr указывает, следует ли заменить LF на CR + LF. Если вы неправильно установили эту настройку, вы получите текст ступеньки, где
each
line
begins
где предыдущая строка остановилась. Так что даже Unix, когда он оставлен в необработанном режиме, требует CR + LF для завершения строк. Неявный CR перед LF является изобретением unix, вероятно, в качестве экономии, поскольку он экономит один байт на строку.
Родословная Unix языка C перенесла это соглашение в стандарт языка C, который требует только «\ n» (который кодирует LF) для завершения строк, что накладывает бремя на библиотеки времени выполнения для преобразования необработанных файловых данных в логические строки.
Язык C также ввел термин «новая строка», чтобы выразить понятие «терминатор родовой строки». Мне сказали, что комитет ASCII изменил имя персонажа 0x0A на «новую строку» примерно в 1996 году, поэтому уровень путаницы был поднят еще выше.
\r\n
. Он также используется большинством текстовых интернет-протоколов (например, SMTP, HTTP и т. Д.) По той же причине, что и Windows (т. Е. История).