我是 Rust 新手,并尝试使用 nix crate 重写 https://kernel.org/doc/html/v4.19/input/uinput.html 的示例。但首先在 C 中的 ioctl() 中,我在 nix::ioctl 中找到模拟宏时遇到问题。我指的是这个:
ioctl(fd, UI_SET_EVBIT, EV_KEY);
这个问题的解决方案是什么? 谢谢, 谢尔盖
nix
crate 不允许您直接调用 ioctl
。相反,它提供宏来围绕 ioctl
调用创建包装器,然后您可以调用这些包装器。
UI_SET_EVBIT
在 linux/uinput.h
中定义为:
#define UINPUT_IOCTL_BASE 'U'
#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int)
翻译为:
const UINPUT_IOCTL_BASE: u8 = b'U'; // Defined in linux/uinput.h
ioctl_write_int!(ui_set_evbit, UINPUT_IOCTL_BASE, 100);
现在您可以像这样调用
ui_set_evbit
函数:
const EV_KEY: nix::sys::ioctl::ioctl_param_type = 1; // Defined in linux/input-event-codes.h
unsafe ui_set_evbit (EV_KEY).unwrap();