Rust ioctl() 类似于 ioctl(fd, UI_SET_EVBIT, EV_KEY);

问题描述 投票:0回答:1

我是 Rust 新手,并尝试使用 nix crate 重写 https://kernel.org/doc/html/v4.19/input/uinput.html 的示例。但首先在 C 中的 ioctl() 中,我在 nix::ioctl 中找到模拟宏时遇到问题。我指的是这个:

ioctl(fd, UI_SET_EVBIT, EV_KEY);

这个问题的解决方案是什么? 谢谢, 谢尔盖

rust ioctl uinput
1个回答
0
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.