Directorios con nombres reservados

Últimamente he visto muchas referencias por Twitter y Facebook a carteles como este:

Carpeta Con TrollSin embargo, parece que no hay mucha información acerca de ese comportamiento… así que aquí va :)

De los tiempos de MS-DOS

En la era de MS-DOS, los programas se comunicaban con los dispositivos escribiendo en direcciones específicas del sistema de ficheros. Para enviar información al puerto CON del ordenador, el programa debía escribir en el directorio CON y el sistema se encargaba de hacérselo llegar al puerto. Esto ocurre con muchos más nombres reservados, como por ejemplo LPT1, LPT2 y AUX.

Supongo que alguno se estará preguntando por qué no están bloqueados únicamente esos directorios en el raíz de la partición primaria. La respuesta es simple: las primeras versiones de MS-DOS no manejaban directorios. Por tanto, esos nombres están reservados en todos los directorios y no sólo en el raíz, ya que esos programas podrían hacer uso de los nombres reservados en cualquier parte.

¿Esto sigue siendo así?

No. Esta restricción se mantiene únicamente por motivos de compatibilidad, pero puede forzarse la creación de esos directorios si queremos (aunque tendríamos que tener una razón realmente buena…). La forma de forzar la creación es usar Universal Naming Convention (UNC).

Por ejemplo, podemos crear un fichero text.txt con el contenido «prueba» dentro de un directorio con de la siguiente forma:

mkdir \\.\C:\Users\Pablo\con && echo prueba > \\.\C:\Users\Pablo\con\test.txt && more \\.\C:\Users\Pablo\con\test.txt

Ahora bien, no todos los programas se han programado bien, así que muchos van a tener problemas a la hora de manejar UNC… de hecho, CMD no soporta rutas UNC como directorio de trabajo, así que no vais a poder estar en ese directorio desde CMD, aunque sí podréis manejar los ficheros de ese directorio.

¿Qué mi madre es el \\.\ y por qué no lo he usado en mi vida?

Es una muy buena pregunta. Yo comencé en la informática con un Windows 95, pero mi primera terminal la manejé con entornos UNIX (aunque ahora no suele PowerShell ni para ir al baño) y por tanto tengo la costumbre de usar las barras, y no las barras invertidas para los directorios. ¿Sabías que Windows también te deja?

Por ejemplo, yo podría ir a mi Home con «cd /Users/Pablo» y Windows no se iba a quejar… ni mucho menos. ¿Por qué no se usa? Supongo que porque todos hemos aprendido usando los mismos libros y la costumbre se va transmitiendo… Además de que mucha gente ha programado su software con la idea de que / no es válido en Windows, y claro, empiezan a salir problemas.

En el caso de UNC el \\.\ nos indica que nos referimos a la máquina local «.», si no, especificaríamos el nombre de la máquina.

¿Qué podemos aprender?

¡Que las rutas importan! Cuando estamos desarrollando un programa tenemos que tener en cuenta las posibilidades que se nos pueden presentar y no pensar que todo el mundo va a usar ese escenario idílico en el que nosotros desarrollamos.

Por Carballude

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P

2 comentarios

  1. Pingback: Bitacoras.com
  2. Hola Pablo,
    estoy empezando ha hacer cosas con Powershell, he montado un par de scripts que hacen cosas contra ficheros , me funcionan correctamente , pero me gustaria ver lo que hacen cuando los lanzo y poder guardarlo ( todo , instruccion por instruccion en un fichero , o sea un log ) y no veo como hacerlo , le he puesto el start-transcript , pero no enseña lo que quiero, y en algun sitio he visto que hay gente que indica que se utilizen write’s para ver por donde va ?? , lo veo un poco pedrestre , sabes si hay algo para poder hacer esto en powershell , en otros software hay traces o logs. No se si es tu especialidad , pero como he visto que trabajas como Developer Evangelist he pensado que igual sabes algo de esto.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *