@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 переніс цю конвенцію у стандарт мови C, який вимагає лише “\ n” (який кодує LF) для завершення рядків, покладаючи навантаження на бібліотеки середовища виконання для перетворення необроблених файлових даних у логічні рядки.
Мова С також запровадила термін "новий рядок", щоб виразити поняття "загальний термінатор рядка". Мені кажуть, що комітет ASCII змінив назву символу 0x0A на "новий рядок" приблизно в 1996 році, тому рівень плутанини був підвищений ще вище.
Ось ще одне обговорення цієї теми з точки зору Unix
Я змінив це друге посилання на знімок у The Wayback Machine, оскільки фактична сторінка вже недоступна.
Сподіваюся, це відповідає на ваше запитання.