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
的值而失败,我也不会感到惊讶。