Como ya se mencionó, dichos archivos son archivos creados por el sistema, o bien representan periféricos en su máquina. También hemos mencionado que el contenido de los archivos en modo bloque está guardado en memoria mientras que el de los de modo caracter no lo está. Para ilustrar esto, inserte un disquete en la disquetera e ingrese el comando siguiente dos veces:
$ dd if=/dev/fd0 of=/dev/null
Usted puede observar lo siguiente: mientras que, la primera vez que se lanzó el comando, se leyó todo el contenido del disquete, la segunda vez no se accedió a la disquetera en absoluto. Esto se debe simplemente a que el contenido de la disquetera se guardó en memoria la primera vez que se lanzó el comando – y entre tanto Usted no cambie el disquete, el mismo permanece allí.
Pero ahora, si quiere imprimir un archivo grande de esta forma (sí, va a funcionar):
$ cat /un/archivo/grande/imprimible/en/algun/lugar >/dev/lp0
el comando tardará el mismo tiempo si lo
lanza una vez, dos veces, o cincuenta veces. Esto se debe a que
/dev/lp0
es un archivo de modo caracter y su
contenido no se conserva en memoria.
El hecho de que los archivos
de modo bloque se conserven en memoria tiene un efecto secundario
interesante: no sólo se conservan las lecturas sino también las
escrituras. Esto permite que las escrituras en el disco sean
asíncronas: cuando Usted escribe un archivo en disco, la operación
de escritura en sí misma no es inmediata. Sólo ocurrirá cuando el
núcleo Linux decida ejecutar la escritura en el
hardware. Por supuesto, se puede obviar este comportamiento de ser
necesario, para cierto sistema de archivos. Eche un vistazo a las
opciones sync
y async
en la
página Man mount(8) y también
consulte Sección 7, “Los atributos de los archivos” para más detalles.
Finalmente, cada archivo especial tiene un número mayor y uno menor. Aparecen en la respuesta de ls -l, en lugar del tamaño, debido a que el tamaño para este tipo de archivos es irrelevante:
$ ls -l /dev/hdc /dev/lp0 brw-rw---- 1 reina cdrom 22, 0 Feb 23 19:18 /dev/hdc crw-rw---- 1 root root 6, 0 Feb 23 19:17 /dev/lp0
Aquí, los números mayor y
menor de /dev/hdc
son 22 y 0, mientras que
para /dev/lp0
son 6 y 0. Note que estos
números son únicos por categoría de archivo, lo que significa que
puede haber un archivo de modo caracter con 22 por mayor y 0 por
menor, y similarmente sólo puede haber
un archivo de modo bloque con 6 por mayor y 0 por menor. Estos
números existen por una razón simple: le permiten al núcleo asociar
las operaciones adecuadas para estos archivos (es decir, con los
periféricos a los cuales se refieren estos archivos): no se
controla a una disquetera de la misma manera que, digamos, a un
disco rígido SCSI.