Hasta donde sé, cada sistema operativo tiene una forma diferente de marcar el carácter de fin de línea (EOL). Los sistemas operativos comerciales utilizan el retorno de carro para EOL (retorno de carro y avance de línea en Windows, retorno de carro solo en Mac). Linux, por otro lado, solo usa el avance de línea para EOL.
¿Por qué Linux no utiliza el retorno de carro para EOL (y solo el avance de línea)?
Respuestas:
Windows usa CRLFporque lo heredó de MS-DOS.
MS-DOS usa CRLFporque se inspiró en CP / M que ya estaba usando CRLF.
CP / M y muchos sistemas operativos de los años ochenta y anteriores se usaban CRLFporque era la forma de terminar una línea impresa en un teletipo (volver al comienzo de la línea y saltar a la siguiente línea, como las máquinas de escribir normales). Esto simplificó la impresión de un archivo porque se requería menos o ningún procesamiento previo. También había requisitos mecánicos que impedían que un solo personaje fuera utilizable. Es posible que se requiera algún tiempo para permitir que el carro regrese y la platina gire.
Gnu / Linux usa LFporque es un clon de Unix . 1
Unix usó un solo carácter, LFdesde el principio para ahorrar espacio y estandarizar a un final de línea canónico, el uso de dos caracteres fue ineficiente y ambiguo. Esta opción fue heredada de Multics, que la utilizó desde 1964. La memoria, el almacenamiento, la potencia de la CPU y el ancho de banda eran muy escasos, por lo que valía la pena ahorrar un byte por línea. Cuando se imprimió un archivo, el controlador estaba convirtiendo el avance de línea (nueva línea) a los caracteres de control requeridos por el dispositivo de destino.
LFfue preferido CRporque este último todavía tenía un uso específico. Al reposicionar el carácter impreso al comienzo de la misma línea, permitió sobrepasar los caracteres ya escritos.
Manzana inicialmente decidió utilizar también un único carácter, pero por alguna razón recogió el otro: CR. Cuando cambió a una interfaz BSD, se movió a LF.
Estas opciones no tienen nada que ver con el hecho de que un sistema operativo sea comercial o no.
1 Esta es la respuesta a tu pregunta.
fuente
\n
, independientemente de algún dispositivo de salida en particular.El artículo de Wikipedia en "Newline" rastrea la elección de NL como terminador de línea (o separador) a Multics en 1964; Desafortunadamente, el artículo tiene pocas citas de fuentes, pero no hay razón para dudar de que esto sea correcto. Hay dos ventajas obvias en esta elección sobre CR-LF: ahorro de espacio e independencia del dispositivo.
La alternativa principal, CR-LF, se origina en los códigos de control utilizados para mover físicamente el carro de papel en una máquina de teletipo, donde CR devolvería el carro a su posición inicial, y LF rotaría el rodillo de papel para mover la posición de impresión hacia abajo. línea. Los dos caracteres de control aparecen en el código ITA2 que data de 1924 y que aparentemente todavía está en uso (ver Wikipedia); aparentemente ITA2 los tomó de la variante Murray del código Baudot que data de 1901.
Para los lectores más jóvenes, vale la pena señalar que en la tradición del mainframe, no había un personaje de nueva línea; más bien, un archivo era una secuencia de registros que tenían una longitud fija (a menudo 80 caracteres, basados en tarjetas perforadas) o una longitud variable; Los registros de longitud variable generalmente se almacenaban con un recuento de caracteres al comienzo de cada registro. Si tiene un archivo mainframe que consta de una secuencia de registros de longitud variable, cada uno de los cuales contiene contenido binario arbitrario, convertirlo sin pérdida a un archivo de estilo UNIX puede ser una conversión difícil.
Linux, por supuesto, fue solo una reimplementación de Unix, y Unix tomó muchas de sus decisiones de diseño de Multics, por lo que parece que la decisión clave se tomó en 1964.
fuente
Otras respuestas han rastreado la cadena de herencia hasta la década de 1960 y los teletipos. Pero aquí hay un aspecto que no cubrieron.
En los días de los teletipos, había momentos en los que era deseable hacer algo llamado sobresalir. A veces, se usaba el sobreescritura para ocultar una contraseña, porque borrar la contraseña simplemente no era factible. Otras veces, se realizó una superposición para obtener un símbolo que no estaba en la fuente. Por ejemplo, la letra O y una barra oblicua producen un nuevo símbolo.
El sobreesfuerzo se logró colocando un retorno de carro sin avance de línea, a veces se usaba un retroceso suficiente. Por esta razón, las personas de Unix decidieron no utilizar el retorno de carro como separador de línea, y optaron por el avance de línea. Esto también funcionó bien para leer textos producidos usando la convención CRLF. El CR se traga y el LF se convierte en el separador.
fuente
Si bien podría traducir la pregunta histórica en una pregunta sobre el lenguaje C, la razón por la que Linux y todos los sistemas conformes con POSIX o POSIX-ish deben usar
LF
(o al menos cualquiera que sea el'\n'
carácter C ) ya que la nueva línea es una consecuencia de la intersección de los requisitos de C y POSIX. Mientras que C permite que los "archivos de texto" y los "archivos binarios" difieran (de hecho, los archivos de texto pueden estar basados en registros que consisten en una secuencia de registros de línea, además de cosas menos exóticas como haber'\n'
traducido a / desdeCR
/LF
como en DOS / Windows ), POSIX exige que el texto y el modo binario se comporten igual. Esta es en gran parte la razón por la cual las herramientas de línea de comando comocat
son poderosos / útiles; serían mucho menos si solo trabajaran con binario, o solo con texto, pero no con ambos.fuente