¿Cómo crear un archivo de dispositivo falso que acepte entradas de un programa C?

¿Cómo crear un archivo de dispositivo falso que acepte entradas de un programa C?

Quiero crear un programa en C que acepte entradas de un joypad ( /dev/input/js0), las procese y luego las envíe a un archivo de dispositivo falso (carácterobloque) etiquetado como un teclado (oh, y quées¿El archivo de dispositivo para un teclado? Me gustaría saber si es posible hacer esto y, de ser así, cómo.

Respuesta1

Mire de cerca un extracto de un ls -al /devcomando en mi sistema:

brw-rw----  1 root floppy    8,   0 Jun  7 19:55 sda
brw-rw----  1 root floppy    8,   1 Jun  7 19:55 sda1
brw-rw----  1 root floppy    8,   2 Jun  7 19:55 sda2
brw-rw----  1 root floppy    8,   3 Jun  7 19:55 sda3
brw-rw----  1 root floppy    8,   5 Jun  7 19:56 sda5
brw-rw----  1 root floppy    8,   6 Jun  7 19:56 sda6
brw-rw----  1 root floppy    8,   7 Jun  7 19:56 sda7
brw-rw----  1 root floppy    8,   8 Jun  7 19:57 sda8
brw-rw----  1 root floppy    8,  16 Jun  7 19:55 sdb
brw-rw----  1 root floppy    8,  32 Jun  7 19:55 sdc
brw-rw----  1 root floppy    8,  33 Jun  7 19:55 sdc1
brw-rw----  1 root floppy    8,  34 Jun 11 10:39 sdc2
brw-rw----  1 root floppy    8,  35 Jun  7 19:56 sdc3

Los dos números después del ID del grupo pero antes de la fecha son los números mayor y menor del archivo del dispositivo. Este es básicamente el "tipo" de dispositivo que es. 8 en este caso es una unidad de disco SCSI (o SCSI emulada).

http://lxr.linux.no/linux/Documentation/devices.txtes una lista algo no tan reciente de todos los números mayores y menores. No estoy seguro de la ubicación oficial de la última versión de la lista.

De todos modos, estos archivos se crean con el mknodcomando ( mknod [OPTION]... NAME TYPE [MAJOR MINOR], algunos tipos son bpara bloque, cpara carácter). También hay una mknod()llamada al sistema. No conozco completamente las implicaciones si crea otro archivo con el mismo mayor/menor que un dispositivo existente.

uinputcomo se describe en los comentarios es probablemente lo que está buscando, aunque en el hardware de la PC hay un /dev/psauxque lee/escribe directamente en el puerto PS/2 si su sistema es lo suficientemente antiguo como para tener uno. Ni siquiera podría decirte por dónde empezar con los teclados USB...

Si solo desea un archivo de dispositivo falso y no le importa lo que suceda con los datos que le envía, siempre existe /dev/zero. Además, los enlaces simbólicos pueden ser una solución realmente simple en ese caso.

información relacionada