C 直接写入/dev/input/event5,写入字符设备文件
我的键盘有音量控制器。我试图直接触发/模拟一个音量增大事件。使用C 直接写入/dev/input/event5,写入字符设备文件,c,linux,file,input,C,Linux,File,Input,我的键盘有音量控制器。我试图直接触发/模拟一个音量增大事件。使用xxd-c24event5,我可以监视文件包含的内容。当我使用实际音量按钮时,它会正常触发。下面是一个C脚本,它写入按钮发送的确切数据 int main() { int f = open("/dev/input/event5", O_WRONLY); if(f == -1) { perror("Could not open event5"); return 1; }
xxd-c24event5
,我可以监视文件包含的内容。当我使用实际音量按钮时,它会正常触发。下面是一个C脚本,它写入按钮发送的确切数据
int main()
{
int f = open("/dev/input/event5", O_WRONLY);
if(f == -1)
{
perror("Could not open event5");
return 1;
}
struct input_event e;
gettimeofday(&e.time, 0);
e.type = 0x0400;
e.code = 0x0400;
e.value = 0x0e9000c00;
write(f, &e, sizeof(e));
gettimeofday(&e.time, 0);
e.type = 0x0100;
e.code = 0x7300;
e.value = 0x01000000;
write(f, &e, sizeof(e));
gettimeofday(&e.time, 0);
e.type = 0x0000;
e.code = 0x0000;
e.value = 0x00000000;
write(f, &e, sizeof(e));
return 0;
}
但是xxd-c 24 event5
没有检测到写入,也没有在我的桌面上触发音量增大操作
文件正在正常打开,没有错误。但我仍然怀疑open命令有问题。这让我想问
如何写入这种类型的文件
crw-rw---- 1 root input 13, 69 Feb 1 17:26 event5
“我正试图直接触发/模拟音量增大事件。”要增大音量吗?出于某种原因,更直接地这样做不是一种选择吗?@Ryan这一切都是为了教育目的。没有实际意义。这个问题的答案有帮助吗?要生成这样的事件,必须对内核进行指令插入,即编写特殊模块。
write()
调用是否真正成功?您没有检查返回值。如果他们将errno
设置为类似ENOSYS
或ENOTSUP
的值而失败,我也不会感到惊讶。