# Archivo de dispositivo

Los archivos de dispositivos o ficheros de dispositivos (en inglés device files) son archivos especiales usados en casi todos los sistemas operativos derivados de Unix y también en otros sistemas.

## Archivos de dispositivos en Unix y GNU/Linux

En los sistemas operativos Unix y GNU/Linux un archivo de dispositivo es un archivo especial estandarizado en Filesystem Hierarchy Standard que se establece en el directorio /dev (en el caso de Solaris en /devices) en cuyos subdirectorios se establece un contacto con dispositivos de la máquina, ya sean reales, como un disco duro, o virtuales, como /dev/null. Esta flexibilidad capaz de abstraer el dispositivo y considerar solo lo fundamental, la comunicación, le ha permitido adaptarse a la rapidez de los cambios y a la variación de dispositivos que ha enriquecido a la computación.
El archivo de dispositivo representa al dispositivo para comunicarlo con programas que se ejecutan en la máquina. No es un archivo propiamente dicho, sino que el usuario lo ve como un archivo. Para ello, debe existir un driver apropiado para el dispositivo.
Por ejemplo, el programa de edición de imágenes GIMP puede acceder al escáner a través del archivo de dispositivo /dev/scan.
Existen varios tipos de dispositivos:
* c – character devices: dispositivos orientados a caracteres
* b – block devices: dispositivos orientados a bloques
* s – socket devices: dispositivos orientados a sockets
Los nombres de los archivos de dispositivos dependen del sistema operativo.

### Dispositivos orientados a bloques

Dispositivos orientados a bloques transmiten datos en bloques (paquetes) y por esa razón son usados a menudo para la transmisión paralela de datos. Estos dispositivos utilizan el búfer de datos del sistema operativo.
Ejemplo de archivos de dispositivos orientados a bloques :
| Nombre del archivo | Significado |
| fd0 | 1. disquetes |
| hda | IDE-disco duro o IDE-CD-ROM-Lector conectado al 1. enchufe Master |
| hdb | IDE-disco duro o IDE-CD-ROM-Lector conectado al 1. enchufe Slave |
| hda1 | 1. primera partición de disco del primer IDE-disco duro |
| hda15 | 15. partición lógica del 1. disco duro IDE |
| ad0 | IDE-disco duro conectado al 1. enchufe Master (FreeBSD) |
| ad1 | IDE-disco duro conectado al 1. enchufe Slave (FreeBSD) |
| ad0s1 | 1. Slice del primer disco duro IDE (FreeBSD) |
| ad0s15 | 15. Slice del primer disco duro IDE (FreeBSD) |
| ad0s1a | 1. partición en el 1. Slice del 1. disco duro IDE (FreeBSD) |
| ad0s1b | 2. Partición en el 1. Slice del 1. disco duro IDE (FreeBSD) |
| acd0 | IDE-CD-ROM-Lector en el 1. enchufe Master (FreeBSD) |
| acd1 | IDE-CD-ROM-Lector en el 1. enchufe Slave (FreeBSD) |
| sda | SCSI-disco duro (portátil), con el menor SCSI-ID (Linux) |
| sdb | SCSI-disco duro (portátil) con el siguiente SCSI-ID (Linux) |
| sda1 | 1. Partición del primer disco duro (portátil) SCSI |
| sda15 | 11. partición lógica del primer disco duro (portátil) SCSI |
| da0 | Disco duro (portátil) SCSI, con la menor SCSI-ID (FreeBSD) |
| da1s2e | 5. partición en el 2. slice del 2. disco duro (portátil) SCSI (FreeBSD) |
| scd0 | 1. lector SCSI-CD-ROM |
| cd0 | 1. lector SCSI-CD-ROM (FreeBSD) |
| cCtTdDsS | en el C° controlador SCSI con la SCSI-ID=T, el D° disco duro y en él el S° Slice (Solaris) |
| cdrom | Enlace simbólico al Lector de CD-ROM |

### Dispositivos orientados a caracteres

Dispositivos orientados a caracteres transmiten solo un Bit o solo un Byte a la vez, es decir, utilizan la transmisión serial de datos, sin usar buffer.
Ejemplos de archivos de dispositivos orientados a caracteres :
| Nombre del archivo | Significado |
| ttyS0 | 1. Puerto serie, antiguamente el teclado del terminal |
| lp0 | 1. Puerto paralelo |
| lp1 | 2. puerto paralelo |
| ttyX | Enlace simbólico para un Pseudoterminal |
| usbdev1.1 | Archivo de dispositivo para aparatos con USB |
| mouse | Enlace simbólico al ratón |
La tarjeta de red, por ejemplo Ethernet, ISDN, no es contactada a través de archivos de dispositivo, sino a través de TCP/IP, aunque existen archivos de dispositivo para aplicaciones especiales como Netlink Device, D-Channel, etc.

### Dispositivos orientados a sockets

Un socket de Internet no es un archivo de dispositivo, sino una forma de comunicación entre procesos.
Ejemplos de dispositivos orientados a sockets :
| Nombre del archivo | Significado |
| /dev/log | Socket de syslog |
| /dev/gpmdata | Socket de GPM-Mouse-Multiplexor |
| /dev/printer | Socket para el protocolo de impresión en red de Berkeley |

### Archivos de dispositivos virtuales

Un caso especial son los archivos virtuales con los cuales no se comunica con un dispositivo real.
Ejemplos para archivos de dispositivos virtuales :
| Nombre del archivo | Significado |
| /dev/null | acepta entrada de datos sin producir respuesta |
| /dev/zero | produce un flujo de ceros, cada uno de 8 bits, (en C: '\000') |
| /dev/random | produce números aleatorios o por lo menos secuencias pseudoaleatorias criptográficamente fuertes. (en el primer caso puede tratarse de un dispositivo real que recoge variables externas como temperatura, posición del ratón, código de las últimas teclas pulsadas, etc, para generar el número.) |
| /dev/urandom | produce secuencias pseudoaleatorias de menor aleatoriedad que /dev/random pero no produce bloqueos. |
| /dev/loopX (X toma valores 0,1,2,3,...) | Dispositivos de bloques virtuales que apunta a un fichero. Permiten dar a un fichero la apariencia de ser un disco duro para el resto del sistema. |

### devfs

devfs es una implementación específica de un sistema de archivos de dispositivos en sistemas operativos similares a Unix, que se utiliza para presentar archivos de dispositivos. El mecanismo subyacente de implementación puede variar, según el sistema operativo.
Mantener estos archivos especiales en un sistema de archivos implementado físicamente, como un disco duro, es inconveniente y, como de todos modos necesita la asistencia del kernel, surgió la idea de un sistema de archivos lógico de propósito especial que no se almacena físicamente.
Definir cuándo los dispositivos están listos para aparecer no es trivial. El enfoque de devfs es que el controlador del dispositivo solicite la creación y eliminación de entradas de devfs relacionadas con los dispositivos que habilita y deshabilita.