@sshannin разместил URL из блога Раймонда Чена, но он больше не работает. В блоге изменилось внутреннее программное обеспечение, поэтому изменились URL-адреса.
Полистав старые сообщения в новом блоге, я нашел его здесь .
Цитата из блога:
Почему терминатор линии CR + LF?
Этот протокол восходит к временам телетайпов. 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, вероятно, в целях экономии, поскольку он экономит один байт на строку.
Предки языка C unix перенесли это соглашение в стандарт языка C, который требует только «\ n» (который кодирует LF) для завершения строк, возлагая на библиотеки времени выполнения бремя преобразования необработанных данных файла в логические строки.
В языке C также был введен термин «новая строка», чтобы выразить понятие «общий терминатор строки». Мне сказали, что комитет ASCII изменил имя символа 0x0A на «новую строку» примерно в 1996 году, так что уровень путаницы был еще выше.
Вот еще одно обсуждение этой темы с точки зрения unix.
Я изменил эту вторую ссылку на снимок в The Wayback Machine, поскольку фактическая страница больше не доступна.
Надеюсь, это ответит на ваш вопрос.