Как создать поддельный файл устройства, который принимает входные данные из программы на языке C?

Как создать поддельный файл устройства, который принимает входные данные из программы на языке C?

Я хочу создать программу на языке C, которая принимает входные данные с джойстика ( /dev/input/js0), обрабатывает их, а затем отправляет их в файл поддельного устройства (символьныйилиблок) помечен как клавиатура (о, и чтоявляетсяфайл устройства для клавиатуры?. Я хотел бы узнать, возможно ли это сделать, и если да, то как.

решение1

Внимательно посмотрите на отрывок из ls -al /devкоманды в моей системе:

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

Две цифры после идентификатора группы, но перед датой — это основной и дополнительный номера файла устройства. По сути, это «вид» устройства. В данном случае 8 — это дисковод SCSI (или эмулируемый SCSI).

http://lxr.linux.no/linux/Documentation/devices.txtэто не совсем свежий список всех основных и второстепенных чисел. Не уверен в официальном местоположении последней версии списка.

Так или иначе, эти файлы создаются командой mknod( mknod [OPTION]... NAME TYPE [MAJOR MINOR], некоторые типы bдля блока, cдля символа). Также есть mknod()системный вызов. Я не совсем понимаю последствия, если вы создадите еще один файл с тем же мажором/минором, что и существующее устройство.

uinputкак описано в комментариях, вероятно, то, что вы ищете, хотя на оборудовании ПК есть , /dev/psauxкоторое считывает/записывает напрямую в порт PS/2, если ваша система достаточно старая, чтобы иметь его. Не могу даже сказать вам, с чего начать с USB-клавиатурами ...

Если вам просто нужен файл поддельного устройства и вас не волнует, что происходит с данными, которые вы на него отправляете, всегда есть /dev/zero. Также символические ссылки могут быть действительно простым решением в этом случае.

Связанный контент