"Carácter a la vez" es un nombre inapropiado (como lo es la idea de que los dispositivos de caracteres no son necesariamente compatibles con buscar y contar). De hecho, los dispositivos de "bloqueo a la vez" (es decir, estrictamente orientados a la grabación, como una unidad de cinta *) deben ser dispositivos de caracteres. También lo es la idea de que un dispositivo de caracteres debe ser necesariamente inescrutable: los controladores de dispositivos de caracteres definen una file_operations
estructura completa que es libre de definir llseek o no según si el dispositivo admite la operación. Los dispositivos de caracteres que la mayoría de las personas consideran ejemplos son nulos, urandom, dispositivos TTY, tarjeta de sonido, mouse, etc., que no se pueden buscar debido a los detalles de esos dispositivos, pero / dev / vcs, / dev / fb0 , y / dev / kmem también son dispositivos de caracteres y todos son buscables.
Como mencioné, un controlador de dispositivo de caracteres define una estructura de operaciones de archivo que tiene punteros de función para todas las operaciones que alguien quiera llamar en un archivo (buscar, leer, escribir, ioctl, etc.) y cada una de ellas se llama una vez cuando la llamada del sistema correspondiente se ejecuta con este archivo de dispositivo abierto. Y leer y escribir, por lo tanto, puede hacer lo que quiera con sus argumentos: puede negarse a aceptar una escritura que sea demasiado grande o solo escribir lo que cabe; solo puede leer los datos correspondientes a un registro en lugar del número total de bytes solicitado.
Entonces, ¿qué es un dispositivo de bloque? Básicamente, los dispositivos de bloque son unidades de disco. Ningún otro tipo de dispositivo (a excepción de las unidades de disco virtual , como ramdisk y loopback) es un dispositivo de bloque. Están integrados en el sistema de solicitud de E / S, la capa del sistema de archivos, el sistema de memoria intermedia / caché y el sistema de memoria virtual de una manera que los dispositivos de caracteres no lo son, incluso cuando está accediendo, por ejemplo, a / dev / sda desde un proceso de usuario . Incluso los "dispositivos en bruto" que la página menciona como excepción son los dispositivos de caracteres .
* Algunos sistemas UNIX implementaron lo que ahora se llama "modo de bloque fijo", que permite que el núcleo agrupe y divida las solicitudes de E / S para que se ajusten a los límites de bloque configurados de la misma manera que se hace para las unidades de disco, como un bloque dispositivo. Se necesita un dispositivo de caracteres para el "modo de bloque variable", que preserva los límites del bloque del programa del usuario, ya que una sola llamada de escritura (2) escribe un bloque y una sola llamada de lectura (2) devuelve un bloque. Dado que el cambio de modo se implementa ahora como un ioctl en lugar de un archivo de dispositivo separado, se utiliza un dispositivo de caracteres. Las unidades de cinta de registro variable son en su mayoría "no buscables" porque la búsqueda implica contar una cantidad de registros en lugar de una cantidad de bytes, y la operación de búsqueda nativa se implementa como un ioctl.