Насколько я знаю, в каждой операционной системе есть свой способ обозначения символа конца строки (EOL). Коммерческие операционные системы используют возврат каретки для EOL (возврат каретки и перевод строки в Windows, возврат каретки только в Mac). Linux, с другой стороны, просто использует перевод строки для EOL.
Почему Linux не использует возврат каретки для EOL (и вместо этого только перевод строки)?
Ответы:
Windows использует, CRLFпотому что она унаследовала его от MS-DOS.
MS-DOS использует, CRLFпотому что он был вдохновлен CP / M, который уже использовал CRLF.
CP / M и многие операционные системы восьмидесятых и более ранних версий использовались CRLFпотому, что это был способ завершить строку, напечатанную на телетайпе (вернуться к началу строки и перейти к следующей строке, как обычные пишущие машинки). Это упростило печать файла, потому что было меньше или не требовалось предварительной обработки. Существовали также механические требования, которые не позволяли использовать один символ. Может потребоваться некоторое время , чтобы каретка вернулась и валик вращался.
Gnu / Linux использует, LFпотому что это клон Unix . 1
Unix использовал один символ, LFс самого начала для экономии места и стандартизации до канонического конца строки, использование двух символов было неэффективным и неоднозначным. Этот выбор был унаследован от Multics, который использовал его еще в 1964 году. Память, память, мощность процессора и пропускная способность были очень скудны, поэтому стоило сэкономить один байт на строку. Когда файл печатался, драйвер преобразовывал перевод строки (новая строка) в управляющие символы, требуемые целевым устройством.
LFбыло предпочтительным, CRпотому что последний все еще имел определенное использование. Перемещая напечатанный символ в начало той же строки, он позволил переопределить уже набранные символы.
Apple , изначально решили использовать один символ , но по каким - то причинам выбрал другую: CR. Когда он переключился на интерфейс BSD, он перешел на LF.
Эти выборы не имеют ничего общего с тем, является ли ОС коммерческой или нет.
1 Это ответ на ваш вопрос.
источник
\n
, независимо от определенного устройства вывода.В статье в Википедии "Newline" прослеживается выбор NL в качестве ограничителя (или разделителя) строки для Multics в 1964 году; К сожалению, в статье мало ссылок на источники, но нет никаких оснований сомневаться в том, что это правильно. Есть два очевидных преимущества этого выбора по сравнению с CR-LF: экономия места и независимость от устройства.
Основная альтернатива, CR-LF, исходит из управляющих кодов, используемых для физического перемещения каретки на телетайпной машине, где CR возвращает каретку в исходное положение, а LF поворачивает ролик бумаги, чтобы переместить позицию печати вниз на одну позицию. линия. Два управляющих символа появляются в коде ITA2, который датируется 1924 годом и который по-прежнему используется (см. Википедию); по-видимому, ITA2 взяла их из варианта кода Бодо Мюррея, который датируется 1901 годом.
Для более молодых читателей стоит отметить, что в традиции мэйнфреймов не было символа новой строки; скорее, файл представлял собой последовательность записей фиксированной длины (часто 80 символов на основе перфокарт) или переменной длины; Записи переменной длины обычно хранились с количеством символов в начале каждой записи. Если у вас есть файл мэйнфрейма, состоящий из последовательности записей переменной длины, каждая из которых содержит произвольный двоичный контент, преобразование этого файла без потерь в файл в стиле UNIX может быть сложным преобразованием.
Linux, конечно, был просто повторной реализацией Unix, и Unix принял многие из своих проектных решений от Multics, так что похоже, что ключевое решение было принято в 1964 году.
источник
Другие ответы проследили цепочку наследования до 1960-х годов и телетайпы. Но вот один аспект, который они не охватили.
В дни телетайпа были времена, когда было желательно сделать что-то, называемое перенапряжением. Перекрытие иногда использовалось, чтобы скрыть пароль, потому что стереть пароль было просто невозможно. В других случаях, чтобы получить символ, которого не было в шрифте, было сделано переопределение. Например, буква O и косая черта производят новый символ.
Перенапряжение было достигнуто за счет возврата каретки без перевода строки, хотя иногда использовалось обратное расстояние. По этой причине сотрудники Unix отказались от возврата каретки в качестве разделителя строк и вместо этого выбрали перевод строки. Это также хорошо сработало для чтения текстов, созданных с использованием соглашения CRLF. CR проглатывается, а LF становится разделителем.
источник
В то время как вы могли бы перевести исторический вопрос в вопрос о языке C, причина, по которой Linux и все системы, соответствующие POSIX или POSIX-ish, должны использовать
LF
(или, по крайней мере, любой'\n'
символ C ), так как символ новой строки является следствием пересечения требований C и POSIX. В то время как C позволяет «текстовым файлам» и «двоичным файлам» различаться (фактически текстовые файлы могут основываться на записях, состоящих из последовательности строчных записей, в дополнение к менее экзотическим вещам, таким как'\n'
перевод в / изCR
/LF
как в DOS / Windows ), POSIX требует, чтобы текстовый и двоичный режимы вели себя одинаково. Это в значительной степени причина того, что инструменты командной строки, такие какcat
мощны / полезны; их было бы намного меньше, если бы они работали только с двоичным кодом или только с текстом, но не с обоими.источник