Tanto quanto eu sei, todo sistema operacional tem uma maneira diferente de marcar o caractere de fim de linha (EOL). Os sistemas operacionais comerciais usam retorno de carro para EOL (retorno de carro e alimentação de linha no Windows, retorno de carro apenas no Mac). O Linux, por outro lado, apenas usa o feed de linha para o EOL.
Por que o Linux não usa retorno de carro para EOL (e apenas alimentação de linha)?
Respostas:
O Windows usa CRLFporque o herdou do MS-DOS.
O MS-DOS usa CRLFporque foi inspirado no CP / M que já estava sendo usado CRLF.
O CP / M e muitos sistemas operacionais dos anos 80 e anteriores usavam CRLFporque era a maneira de terminar uma linha impressa em um teletipo (retornar ao início da linha e pular para a próxima linha, como as máquinas de escrever comuns). Isso simplificou a impressão de um arquivo porque havia menos ou nenhum pré-processamento necessário. Havia também requisitos mecânicos que impediam que um único caractere fosse utilizável. Pode ser necessário algum tempo para permitir que o carro retorne e o cilindro gire.
O Gnu / Linux usa LFporque é um clone do Unix . 1 1
O Unix usou um único caractere, LFdesde o início, para economizar espaço e padronizar para um final de linha canônico, usando dois caracteres era ineficiente e ambíguo. Essa escolha foi herdada da Multics, que a utilizou desde 1964. Memória, armazenamento, potência da CPU e largura de banda eram muito escassas, portanto, vale a pena economizar um byte por linha. Quando um arquivo foi impresso, o driver estava convertendo o avanço de linha (nova linha) nos caracteres de controle exigidos pelo dispositivo de destino.
LFfoi preferido CRporque o último ainda tinha um uso específico. Ao reposicionar o caractere impresso no início da mesma linha, ele permitiu ultrapassar os caracteres já digitados.
A Apple inicialmente decidiu também utilizar um único personagem, mas por algum motivo escolheu o outro: CR. Quando mudou para uma interface BSD, mudou-se para LF.
Essas opções não têm nada a ver com o fato de um sistema operacional ser comercial ou não.
1 Esta é a resposta para sua pergunta.
fonte
\n
, independentemente de algum dispositivo de saída específico.O artigo da wikipedia sobre "Nova linha" rastreia a escolha de NL como terminador de linha (ou separador) para Multics em 1964; infelizmente, o artigo tem poucas citações nas fontes, mas não há razão para duvidar que isso esteja correto. Há dois benefícios óbvios para essa escolha em relação ao CR-LF: economia de espaço e independência do dispositivo.
A principal alternativa, CR-LF, se origina nos códigos de controle usados para mover fisicamente o carro de papel em uma máquina de teletipo, onde o CR retornaria o carro à sua posição inicial, e LF giraria o rolo de papel para mover a posição de impressão para baixo um linha. Os dois caracteres de controle aparecem no código ITA2, que remonta a 1924 e que aparentemente ainda está em uso (consulte a Wikipedia); aparentemente o ITA2 os tirou da variante Murray do código Baudot, que data de 1901.
Para leitores mais jovens, vale a pena notar que, na tradição do mainframe, não havia caracteres de nova linha; antes, um arquivo era uma sequência de registros com comprimento fixo (geralmente 80 caracteres, com base em cartões perfurados) ou comprimento variável; registros de tamanho variável eram normalmente armazenados com uma contagem de caracteres no início de cada registro. Se você tiver um arquivo de mainframe que consiste em uma sequência de registros de tamanho variável, cada um contendo conteúdo binário arbitrário, a conversão sem perdas em um arquivo no estilo UNIX pode ser uma conversão complicada.
O Linux, é claro, foi apenas uma reimplementação do Unix, e o Unix tomou muitas de suas decisões de design da Multics, então parece que a principal decisão foi tomada em 1964.
fonte
Outras respostas traçaram a cadeia de herança desde os anos 1960 e os teletipos. Mas aqui está um aspecto que eles não abordaram.
Nos dias dos teletipos, havia momentos em que era desejável fazer algo chamado de ultrapassagem. Overstriking às vezes era usado para ocultar uma senha, porque o apagamento da senha não era possível. Outras vezes, o overstriking foi feito para obter um símbolo que não estava na fonte. Por exemplo, a letra O e uma barra produzem um novo símbolo.
O impacto excessivo foi obtido ao colocar um retorno de carro sem avanço de linha, às vezes era usado um backspace. Por esse motivo, o pessoal do unix decidiu contra o retorno de carro como separador de linha e optou pelo avanço de linha. Isso também funcionou bem para a leitura de textos produzidos usando a convenção do CRLF. O CR é engolido e o LF se torna o separador.
fonte
Embora você possa traduzir a pergunta histórica em uma pergunta sobre a linguagem C, a razão pela qual o Linux e todos os sistemas em conformidade com POSIX ou POSIX-ish devem usar
LF
(ou pelo menos qualquer que seja o'\n'
caractere C ) como a nova linha é uma conseqüência da interseção dos requisitos de C e POSIX. Enquanto C permite que "arquivos de texto" e "arquivos binários" sejam diferentes (na verdade, os arquivos de texto podem ser baseados em registros, consistindo em uma sequência de registros de linha, além de coisas menos exóticas, como'\n'
traduzir para / deCR
/LF
como no DOS / Windows ), O POSIX exige que o modo texto e binário se comportem da mesma maneira. Essa é a razão pela qual as ferramentas de linha de comando, comocat
são poderosos / úteis; eles seriam muito menos se trabalhassem apenas com binário, ou apenas com texto, mas não com os dois.fonte