我想创建一个 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
组 ID 之后但日期之前的两个数字是设备文件的主编号和次编号。这基本上就是设备的“类型”。本例中的 8 是 SCSI(或模拟 SCSI)磁盘驱动器。
http://lxr.linux.no/linux/Documentation/devices.txt是所有主要和次要数字的不太新的列表。不确定最新版本列表的官方位置。
所以无论如何,这些文件是使用mknod
命令创建的(mknod [OPTION]... NAME TYPE [MAJOR MINOR]
某些类型b
用于块,c
用于字符)。还有一个mknod()
系统调用。如果您创建与现有设备具有相同主要/次要的另一个文件,我不完全知道其含义。
uinput
正如评论中所描述的,这可能就是您正在寻找的,尽管在 PC 硬件上,/dev/psaux
如果您的系统足够旧,可以直接读取/写入 PS/2 端口。甚至无法告诉您从哪里开始使用 USB 键盘...
如果您只想要一个假设备文件并且不关心发送给它的数据会发生什么,那么总是有/dev/zero
.在这种情况下,符号链接也可能是一个真正简单的解决方案。