Como criar um arquivo de dispositivo falso que aceita entrada de um programa C?

Como criar um arquivo de dispositivo falso que aceita entrada de um programa C?

Quero criar um programa C que aceite entrada de um joypad ( /dev/input/js0), processe-a e depois envie-a para um arquivo de dispositivo falso (caractereoubloco) rotulado como um teclado (ah, e o queéo arquivo de dispositivo para um teclado?. Gostaria de saber se é possível fazer isso e, em caso afirmativo, como.

Responder1

Observe atentamente um trecho de um ls -al /devcomando em meu 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

Os dois números após o ID do grupo, mas antes da data, são os números maiores e menores do arquivo do dispositivo. Este é basicamente o “tipo” de dispositivo que é. 8 neste caso é uma unidade de disco SCSI (ou SCSI emulado).

http://lxr.linux.no/linux/Documentation/devices.txté uma lista um tanto não tão recente de todos os números maiores e menores. Não tenho certeza da localização oficial da versão mais recente da lista.

De qualquer forma, esses arquivos são criados com o mknodcomando ( mknod [OPTION]... NAME TYPE [MAJOR MINOR], alguns tipos são bpara bloco, cpara caractere). Há também uma mknod()chamada de sistema. Não conheço totalmente as implicações se você criar outro arquivo com o mesmo maior/menor que um dispositivo existente.

uinputconforme descrito nos comentários é provavelmente o que você está procurando, embora no hardware do PC exista um /dev/psauxque lê/grava diretamente na porta PS/2 se o seu sistema tiver idade suficiente para ter uma. Não sabia nem por onde começar com teclados USB...

Se você deseja apenas um arquivo de dispositivo falso e não se importa com o que acontece com os dados que você envia para ele, sempre há arquivos /dev/zero. Além disso, os links simbólicos podem ser uma solução realmente simples nesse caso.

informação relacionada