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

6

Eu quero criar um programa em C que aceite entrada de um joypad ( /dev/input/js0 ), processe e envie para um arquivo de dispositivo falso (bloco de caracteres ou ) rotulado como um teclado (oh, e o que é o arquivo do dispositivo para um teclado ?. Eu gostaria de saber se é possível fazer isso, e se sim, como.

    
por fouric 06.07.2012 / 03:35

1 resposta

2

Observe atentamente um excerto de um comando ls -al /dev no 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 principal e secundário do arquivo do dispositivo. Este é basicamente o "tipo" de dispositivo que é. 8 neste caso é uma unidade de disco SCSI (ou SCSI emulada).

O

link é uma lista um pouco não tão recente de todos os números maiores e menores. Não tem certeza da localização oficial da versão mais recente da lista.

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

uinput , conforme descrito nos comentários, é provavelmente o que você está procurando, embora no hardware do PC exista um /dev/psaux que lê / grava diretamente na porta PS / 2 se o seu sistema tiver idade suficiente para ter um. Não poderia mesmo dizer-lhe onde começar com teclados USB ...

Se você quiser apenas um arquivo de dispositivo falso e não se importar com o que acontece com os dados enviados, sempre haverá /dev/zero . Também links simbólicos podem ser uma solução simples e simples nesse caso.

    
por 13.07.2012 / 04:12

Tags