Почему Windows использует CR LF?



Я понимаю разницу между этими двумя, поэтому нет необходимости вдаваться в это, но мне просто интересно, какие рассуждения стоят за тем, почему Windows использует как CR, так и LF для обозначения разрыва строки. Похоже, что метод Linux (просто используя LF) имеет гораздо больше смысла, экономит место и легче разбирается.

840   6  

6 ответов:

исторически при использовании точечно-матричные принтерытелетайпов CR вернет каретку в первую позицию строки, а LF-в следующую строку. Использование CR+LF в самом файле позволило отправить файл непосредственно на принтер, без какого-либо драйвера принтера.

спасибо @zaph указывая, что это были телетайпы, а не матричные принтеры

Это происходит от телетайпных машин (и пишущих машинок) со времен былых.

раньше, когда вы заканчивали печатать строку, вам приходилось перемещать каретку пишущей машинки (которая удерживала бумагу и скользила влево, когда вы печатали) обратно в начало строки (CR). Затем вам нужно было продвинуть бумагу вниз по строке (LF), чтобы перейти к следующей строке.

есть случаи, когда вы, возможно, не хотели, чтобы линия подачи при возврате каретки, например, если вы собираетесь чтобы зачеркнуть символ с тире (вы бы просто перезаписали его).

но в основном, это сводится к Конвенции. DOS использовала полное соглашение CR/LF, и UNIX немного сократил его. Теперь мы застряли!

@sshannin опубликовал URL из блога Раймонда Чена, но он больше не работает. Блог изменил свое внутреннее программное обеспечение, поэтому URL-адреса изменились.

после обхода старых сообщений в новом блоге я нашел его здесь.

цитата из блога:

Почему линия Терминатор CR+LF?

этот протокол восходит ко временам телетайпов. СГ стоит для "возврата каретки – - контроль CR символ вернул печать головка ("каретка") в колонку 0 без выдвижения бумаги. Если стоит для "перевод строки" – НЧ управление персонажем передовой статье одной линии без перемещения печатающей головки. Так что если вы хотите вернуть печать перейдите к нулевому столбцу (готов к печати следующей строки) и выдвиньте бумага (так она печатает на свежей бумаге), вам нужны как 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 указывает, является ли a LF должен быть изменен на CR+LF. Если вы ошибаетесь в этой настройке, вы получить лестничный текст, где

каждого

строка

начинается

где предыдущая строка остановилась. Так что даже unix, когда он остается в сыром режиме, требуется CR+LF для завершения строк. Неявные пр до того, как LF является изобретением unix, вероятно, как экономика, так как он экономит один байт на строку.

родословная unix языка C перенесла это соглашение в C языковой стандарт, который требует только " \n "(который кодирует LF), чтобы завершите строки, возложив бремя на библиотеки времени выполнения преобразование необработанных данных файла в логические строки.

язык C также ввел термин "новая строка" для выражения этот понятие "универсальный линейный Терминатор". Мне сказали, что ASCII комитет изменил имя символа 0x0A на" newline " около 1996 года, таким образом, уровень путаницы был поднят еще выше.

вот еще одно обсуждение этой темы, с точки зрения unix

Я изменил эту вторую ссылку на снимок в машине Wayback, так как фактическая страница больше не доступна.

Я надеюсь, что это отвечает вашим вопрос.

Я видел несколько учетных записей о том, что причина отправки двух символов (а иногда и больше) вместо одного заключалась в том, чтобы лучше соответствовать скорости передачи данных физической скорости печати (Это было давно). Перемещение печатающей головки занимало больше времени, чем печать одного символа, а отправка дополнительных символов была способом предотвращения передачи данных от опережающего печатающего устройства. Поэтому причина, по которой у нас есть несколько символов конец строки в Windows в основном то же самое, что и причина, по которой у нас есть QWERTY клавиатуры -- он был предназначен, чтобы замедлить вещи вниз.

очевидно, что причина, по которой эта практика продолжается в Windows по сей день, основана на некотором понятии постоянной обратной совместимости и, в конечном счете, просто простой инерции.

отметить, однако, Это соглашение не строго соблюдается Windows на уровне операционной системы. Любое приложение Windows можно игнорировать конвенция, в зависимости от того, с какими другими приложениями она пытается быть совместимой.

интересно, что статья в Википедии о "Newline", утверждает, что Windows 8 может внести изменения в использование только LF. В статье также говорится, что Mac OS X ввел переход от LF+CR к просто LF.

другие дали ответ, но я хотел добавить... Я думаю, вы слишком молоды, чтобы пользоваться пишущей машинкой? ;) Каретка-это барабан. Перемещая его горизонтально вправо, возвращает неподвижную головку типа назад к левому краю страницы. Поворот каретки с помощью пальца и большого пальца продвигает страницу на одну строку(ы).

Comments

    Ничего не найдено.