El orígen del Ctrl-Z

Debo aclarar que con el título de El orígen del Ctrl-Z, no me refiero a los inicios del atajo de teclado para el comando deshacer, que se usó de forma conocida por primera vez en los Laboratorios Xerox de Palo Alto, sino a la cada vez menos usual forma de marcar los fines de archivo con el carácter Ctrl-Z (ASCII 26).

Aunque Raymond de The Old New Thing, lo explica mejor que yo, la causa viene heredada de DOS, que a su vez lo heredó de CP/M, con el que debía ser compatible.

Hasta ahí, es algo que al menos yo, e intuyo que muchos de vosotros también, ya sabíamos. Pero, ¿por qué CP/M marcaba así el final del archivo?

Pues bien, resulta que el espacio en disco para los ficheros, se marcaba usando sectores de 128 bytes, así que si un sector no quedaba ocupado por completo, se rellenaba (padding) usando el carácter 1Ah.

Con MS-DOS, esto ya no era necesario, pues la FAT, realmente almacena el espacio de los archivos en bytes, pero por lo de la compatibilidad comentada anteriormente, debía permitirse el intercambio de archivos entre DOS y FAT, sin arrastrar la posible basura del final. Es por ello que incluso hoy día algunos comandos como COPY, tendrán en cuenta el carácter de fin.

El paso de los años, ha ido arrastrando esta convención. Tanto es así, que si desde el Windows más reciente, introducís en una consola de comandos COPY CON, el sistema recibirá entradas por STDIN (teclado), y las sacará (echo) por STDOUT (pantalla); pero esperará que abortemos el proceso con Ctrl-Z, a pesar de los más de 30 años transcurridos entre CP/M y Windows..



4 comentarios en “El orígen del Ctrl-Z”

  1. [p]Pues bien, resulta que el espacio en disco para los ficheros, se marcaba usando sectores de 128 bytes, así que si un sector no quedaba ocupado por completo, se rellenaba (padding) usando el carácter 1Ah.[/p]
    [p]Con MS-DOS, esto ya no era necesario, pues la FAT, realmente almacena el espacio de los archivos en bytes[/p]

    [p]Esto es totalmente falso, ya que en todos los sistemas de ficheros los ficheros se guardan en bloques, ya que los discos se consideran (son) dispositivos de bloques (en un disco, del tipo que sea, la unidad mínima que puedes leer o escribir no es un byte, es un bloque). Los bloques pueden tener diferentes tamaños, aunque suelen ser 512 bytes o 1024 bytes. Otra cosa es que de cara al usuario los ficheros se consideren como flujos de bytes, y se emplee una marca centinela como EOF (End Of File), en este caso el Ctrl-Z, que por cierto, no proviene de CP/M, ya que anteriormente ya se empleaba en UNIX e incluso en sistemas anteriores.</p>

  2. Ed Hunter, creo que decimos lo mismo. La unidad mínima es el bloque, pero si no tienes ningún otro sitio que te marque cuantos bytes de ese bloque se ha utilizado (por ejemplo FAT), no hay manera de saber cuánto es información real, y cuanto basura, de ahí el padding.

Deja un comentario